在Linux中安装Flask框架(假设已经安装了Python3环境),可以使用如下命令:
pip3installFlask如果安装成功,可以看到类似如下的内容:
SuccessfullyinstalledFlask-1.0.2Werkzeug-0.15.2click-7.0itsdangerous-1.1.02.基本语法(1)初始化所有Flask程序都必须创建一个程序实例,Web服务器使用一种名为Web服务器网关接口的的协议(WSGI),把接收自客户端的所有请求转发给这个对象处理。程序实例是Flask类的对象,使用下面代码构建:
fromflaskimportFlaskapp=FLask(__name__)Flask类的构造函数只有一个必须指定的参数,即程序主模块或则包的名称。。在大多数程序中,Python的name变量就是所需的值。
客户端把请求转发给Web服务器,Web服务器再把请求发送给Flask程序实例。程序实例需要知道对于每个URL请求,运行哪些代码,所以保存一个URL请求到Python函数的映射关系。处理URL和函数映射关系的程序称为路由。
@app.route("/")defindex():return"
hello,Flask
"这里把index()函数注册为程序根地址的处理程序。在浏览器中访问网站首页后,会触发服务器执行index()函数。这个函数的返回值叫做响应,是客户端接收到的内容。像index这样的函数称为视图函数。视图函数的返回的响应可以是简单的html,也可以是复杂的表单。程序实例用run方法启动Flask集成的开发Web服务器:
if__name=='___main_':app.run(debug=True)name=='main'是Python的惯常用法,在这里确保直接执行这个脚本时才启动开发Web服务器。如果这个脚本由其他脚本引入,程序假定父级脚本会启动不同的服务器,因此不会执行app.run()。
服务器启动后,会进入轮询,等待并处理请求。轮询会一直运行,直到程序停止,比如按Ctrl-C键
有一些选项参数可被app.run()函数接受用于设置Web服务器的操作模式。在开发过程中启用调试模式会带来一些便利,比如说激活调试器和重载程序。要想启用调试模式,我们可以把debug参数设为True。
建立一个代码文件testweb.py,内容如下:
fromflaskimportFlaskapp=Flask(__name__)@app.route('/')defindex():return'
hello,flask
'if__name__=='__main__':app.run(debug=True)然后,在LinuxShell环境中执行如下命令:python3testweb.py然后,屏幕上会出现如下信息:
在网页目录下,创建一个templates目录,把模板文件存放在该目录下,比如,在这个模板目录下建立一个index.html,内容如下:
DatabaseLabofXiamenUniversity
然后,把testweb.py的内容修改为如下:fromflaskimportFlaskfromflaskimportrender_templateapp=Flask(__name__)@app.route('/')defindex():returnrender_template("index.html")if__name__=='__main__':app.run(debug=True)使用Ctrl+C组合键,把原来已经在运行的testweb.py结束掉,然后,在LinuxShell环境中执行如下命令:
python3testweb.py就可以看到网页了。
把testweb.py修改为:
fromflaskimportFlaskfromflaskimportrender_templateapp=Flask(__name__)@app.route('/')defindex():user={'username':'Xiaoming'}returnrender_template("index.html",title='Welcome',user=user)if__name__=='__main__':app.run(debug=True)把index.html文件修改为:
Hello{{user.username}}
DatabaseLabofXiamenUniversity
使用Ctrl+C组合键,把原来已经在运行的testweb.py结束掉,然后,在LinuxShell环境中执行如下命令:在网页目录下新建draw.py文件,内容如下:
#-*-coding:utf-8-*-frompyechartsimportBardefdraw_bar():print("开始绘图")attr=["海沧","湖里","集美","思明","翔安","同安"]v0=[10,30,20,15,22,23]v1=[10,30,20,15,22,23]v2=[10,30,20,15,22,23]v3=[10,30,20,15,22,23]bar=Bar("厦门市租房租金概况")bar.add("最小值",attr,v0,is_stack=True)bar.add("最大值",attr,v1,is_stack=True)bar.add("平均值",attr,v2,is_stack=True)bar.add("中位数",attr,v3,is_stack=True)bar.render('./templates/result.html')print("结束绘图")把testweb.py修改为:
fromflaskimportFlaskfromflaskimportrender_templateimportdrawapp=Flask(__name__)@app.route('/')defindex():draw.draw_bar()returnrender_template("result.html")if__name__=='__main__':app.run(debug=True)使用Ctrl+C组合键,把原来已经在运行的testweb.py结束掉,然后,在LinuxShell环境中执行如下命令:
把draw.py文件的内容修改为如下:
#-*-coding:utf-8-*-frompyechartsimportBardefdraw_bar():w=[[0.5,0.4,0.3],[0.4,0.5,0.3],[0.3,0.4,0.5],[0.5,0.3,0.4]]attr=["决策树","随机森林","logistic回归"]bar=Bar("tf-idf分类结果图")#创建条形图对象bar.add("accuracy",attr,w[0])bar.add("precision",attr,w[1])bar.add("recall",attr,w[2])bar.add("f1",attr,w[3])bar.render('./templates/result.html')testweb.py不变,还是如下:
把index.html内容修改为如下:
DatabaseLabofXiamenUniversity
fromflaskimportFlaskfromflaskimportrequestfromflaskimportrender_templateimportdrawapp=Flask(__name__)@app.route('/')defindex():returnrender_template("index.html")@app.route('/login',methods=['post'])deflogin():username=request.form.get('username')password=request.form.get('password')returnrender_template('loginsuccess.html',username=username,password=password)if__name__=='__main__':app.run(debug=True)在templates目录下再新建一个loginsuccess.html,内容如下:
LoginSuccess.Nameis:{{username}},Passwordis:{{password}}
使用Ctrl+C组合键,把原来已经在运行的testweb.py结束掉,然后,在LinuxShell环境中执行如下命令:把index.html的内容修改为如下:
DatabaseLabofXiamenUniversity
fromflaskimportFlaskfromflaskimportrequestfromflaskimportrender_templateimportdrawapp=Flask(__name__)@app.route('/')defindex():returnrender_template("index.html")@app.route('/login',methods=['post'])deflogin():wordvector=request.form.get('wordvector')classifier=request.form.get('classifier')returnrender_template('submitsuccess.html',wordvector=wordvector,classifier=classifier)if__name__=='__main__':app.run(debug=True)在templates目录下表再新建一个submitsuccess.html,内容如下:
FormSubmitSuccess.WordVectoris:{{wordvector}},Classfifieris:{{classifier}}
使用Ctrl+C组合键,把原来已经在运行的testweb.py结束掉,然后,在LinuxShell环境中执行如下命令:index.html的内容不变,还是如下:
fromflaskimportFlaskfromflaskimportrequestfromflaskimportrender_templateimportdrawapp=Flask(__name__)@app.route('/')defindex():returnrender_template("index.html")@app.route('/login',methods=['post'])deflogin():wordvector=request.form.get('wordvector')classifier=request.form.get('classifier')ifwordvector=="1":ifclassifier=="1":print("TF-IDF+logisticregression")elifclassifier=="2":print("TF_IDF+decisiontree")elifclassifier=="3":print("TF-IDF+randomforest")elifwordvector=='2':ifclassifier=="1":print("Word2Vec+logisticregression")elifclassifier=="2":print("Word2Vec+decisiontree")elifclassifier=="3":print("Word2Vec+randomforest")returnrender_template('submitsuccess.html',wordvector=wordvector,classifier=classifier)if__name__=='__main__':app.run(debug=True)submitsuccess.html内容不变,如下:
python3testweb.py然后,就可以在网页中依次选择不同的下拉列表选项,点击提交,然后,可以在运行testweb.py的终端内查看控制台输出的日志信息。