- Flask入门
- Echarts应用
- WorldCloud应用
Flask框架的核心就是Werkzeug和Jinjia2
from flask import Flask
app = Flask(__name__)
#路由解析,通过用户访问的路径匹配相应的函数
@app.route('/')
def hello_world():
return 'Hello World!'
'''
#debug模式开启
@app.route('/index')
def hello():
return '你好'
#通过访问路径,获取用户的字符串参数
@app.route("/user/<name>")
def welcom(name):
return '你好,%s'%name
#通过访问路径,获取用户的数字类型参数 此外还有float类型
@app.route("/user/<int:id>")
def welcom1(id):
return '你好,%d号的会员'%id
'''
#路由路径不能重复,用户通过唯一路径访问特定函数
if __name__ == '__main__':
app.run()
jinjia2返回渲染文件
from flask import Flask
from flask import render_template
import datetime
#-------------------
@app.route('/')
# @app.route('/index')
def index():
time = datetime.date.today() # 普通变量
user = {'nickname': 'Rosie'} # fake user
task = {'任务':"打扫","限时":"三小时"}
return render_template("index.html",
title = 'Home',
name=list1,
user = user,
time=time,
task = task)
#------------------
if __name__ == '__main__':
app.run()
在对应的html文件中,var变量用{{var}}表示
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>Hello, {{user.nickname}}!</h1>
<a>现在是{{ time }}</a>
<a>今天值班的有:</a>
{% for data in name %} <!--用大括号和百分号控制起来是控制结构-->
<li>{{ data }}</li>
{% endfor %}
<a>任务:</a><br/>
<!--了解如何在页面打印表格以及如何迭代-->
<table border="1">
<!--[(key,value),(key,value),(key,value)]-->
{% for key,value in task.items() %}
<tr>
<td>{{ key }}</td>
<td>{{ value }}</td>
</tr>
{% endfor %}
</table>
</body>
</html>
表单的提交,可以通过路径跳转
from flask import Flask
from flask import render_template,request
import datetime
app = Flask(__name__)
#------------------------
#表单提交
@app.route('/test/register')
def register():
return render_template("register.html")
#接收表单提交的路由,需要指定methods为POST
@app.route('/result',methods = ['POST','GET'])
def result(): #函数不能重名
if request.method == 'POST':
result = request.form #表单内容
return render_template("test/result.html",result=result)
#跳转到result.html,并且将表单内容传给result
#---------------------
if __name__ == '__main__':
app.run(debug=True)
register.html
表单提交的方法是"POST"
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="{{ url_for('result') }}" method="post">
<!--url_for('文件'),动态寻找路径,不用写死-->
#<form action="http://localhost:5000/result" method="post">
<p>姓名: <input type="text" name="姓名"></p>
<p>年龄: <input type="text" name="年龄"></p>
<p>性别: <input type="text" name="性别"></p>
<p>地址: <input type="text" name="地址"></p>
<p><input type="submit" value="提交"></p>
</form>
</body>
</html>
result.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<a>表单内容</a>
<table border="1">
<!--[(key,value),(key,value),(key,value)]-->
{% for key,value in result.items() %}
<tr>
<th>{{ key }}</th>
<td>{{ value }}</td>
</tr>
{% endfor %}
</table>
</body>
</html>
右图分别为:
register.html
result.html
将数据库的数据传入:app.py代码
from flask import Flask,render_template
app = Flask(__name__)
@app.route('/movie')
def movie():
datalist = []
conn = sqlite3.connect("movie.db")#同目录下的数据库
cur = conn.cursor()
sql = "select * from movie250"
data = cur.execute(sql)
for item in data:
datalist.append(item)
cur.close()
conn.close()
return render_template("movie.html",movies = datalist)
if __name__ == '__main__':
app.run()
循环写入列表
{% for movie in movies %}
<tr>
<td>{{ movie[0] }}</td>
<td>
<a href="{{ movie[1] }}",target_="_blank">
{{ movie[3] }}
</a>
</td>
<td>{{ movie[4] }}</td>
<td>{{ movie[5] }}</td>
<td>{{ movie[6] }}</td>
<td>{{ movie[7] }}</td>
<td>{{ movie[8] }}</td>
</tr>
{% endfor %}
Echarts应用
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<!-- 引入 ECharts 文件 -->
<script src="../static/assets/js/echarts.min.js"></script>
<!--1,引入js文件-->
</head>
<body>
<!-- 为 ECharts 准备一个具备大小(宽高)的 DOM,图标显示的位置 -->
<div id="main1" style="width: 600px;height:400px;"></div>
<script type="text/javascript">
// 基于准备好的dom,初始化echarts实例
var myChart = echarts.init(document.getElementById('main1'));
//中间代码省略
//
//
</script>
</body>
</html>
WordCloud应用
生成指定样式的图文
import jieba #分词
from matplotlib import pyplot as plt #绘图,数据可视化
from wordcloud import WordCloud #词云
from PIL import Image #图片处理
import numpy as np #矩阵运算
import sqlite3 #数据库
text = " "
con = sqlite3.connect("movie.db")
cur = con.cursor()
sql = 'select introduction from movie250'
data = cur.execute(sql)
for item in data:
text = text+item[0]
print(text)
cur.close()
con.close()
#分词
cut = jieba.cut(text)
string = ' '.join(cut)
print(string)
#绘图
img = Image.open(r'../static/assets/images/bear.jpg')#打开遮罩图片
img_array = np.array(img)#图片转换为数组
wc = WordCloud(
background_color='white',
mask=img_array,
font_path="msyh.ttc" ) #字体所在位置:C:\windows\Fonts
wc.generate_from_text(string)
#绘制图片
fig = plt.figure()
plt.imshow(wc)
plt.axis('off')#是否显示坐标轴
#plt.show()显示生成的词云图片
#输出词云图片的文件
plt.savefig(r'../static/assets',dpi = 500)#dpi指的是清晰度
此间sqlite出现not such table的问题,查看默认路径会发现他自动生成了新的空白数据库,可以将目的数据库替换空白数据库解决问题。
效果: