Django、Flask、Bottle都是Python Web框架,Django比较大众化、Flask比较轻量、Bottle比Flask还轻量。
创建空白Flask Web项目
注意看箭头所指,需要点一下创建虚拟环境
再注意看上图左下有个unresolved import flask的告警
这个告警的原因是还没有安装flask框架
如下图,通过PyPI安装,安装之前需要先配置pip国内源,要不然慢死了
输入包名自动出来安装命令,点一下命令自动安装
输入包名自动出来安装命令,点一下命令自动安装,安装过程在左下方输出栏有显示
安装完flask了,最初的那个unresolved import 'flask'的告警依旧在,但此时环境已配置好了,先忽略那个告警,点绿色小三角Web服务器图标进行调试
出来Hello World!说明环境配通了
至于那个unresolved import 'flask'的告警,你把项目保存、关闭、重新打开,发现那个告警自动消失了,但你注意看console最后一行的后半部分是 /favicon.ico 404
谷歌浏览器F12对网页刷新的时候,很多站点都没有favicon.ico,这无关紧要,但我就是别扭
查了很多资料,走了很多弯路,最终找到一篇文档完美解决了favicon.ico 404 not found的问题,文档:https://www.jianshu.com/p/02980943ed81
这篇里的第2种办法也有用https://flask.palletsprojects.com/en/1.1.x/patterns/favicon/
两种办法都可以
然后就是应用Python SDK了,把api explorer工具生成的python console代码全部粘贴到flask项目app.py的开头第一句话from flask import Flask的后面,然后调试发现console端已经出结果了,但我们要的是网页上出结果,而不是显示"Hello World!"
终端显示结果最关键的一句话是print(resp.to_json_string()) ,网页显示Hello World!是因为hello()里的return "Hello World!"
那我们用return resp.to_json_string()替换return "Hello World!"即可
如图,Web呈现结果的目标已经达成,美中不足的是/favicon.ico 404,我们把之前提到的解决/favicon.ico 404的代码加到下图2句话之间测试看看
代码语言:javascript复制@app.route('/favicon.ico')
def favicon():
return send_from_directory(os.path.join(app.root_path, 'static'),
'favicon.ico', mimetype='image/vnd.microsoft.icon')
注意分析代码里面的app.root_path,这个就是app.py所在目录,不用具体写出来,就用app.root_path表示,app.root_path有个static目录里面有个mimetype为'image/vnd.microsoft.icon'的favicon.ico
整个代码说白了就一句话,当访问/favicon.ico时,发送“根目录/static/favicon.ico”作为返回值
代码语言:javascript复制def favicon():
return send_from_directory(os.path.join(app.root_path, 'static'),
'favicon.ico', mimetype='image/vnd.microsoft.icon')
app.add_url_rule('/favicon.ico',view_func=favicon)
加上代码预览时报NameError: name 'send_from_directory' is not defined
需要参考https://flask.palletsprojects.com/en/1.1.x/patterns/favicon/
在开头加上
import os from flask import send_from_directory
加上后再预览发现不报刚才的错了,但是/favicon.ico 404依然存在?如果你没在app.py所在目录建static目录并在static目录里放favicon.ico的话肯定是404。
让./static/favicon.ico存在后再预览就正常了
注意看网页上出现ico图标了,但是还有个不完美的地方,端口是随机的,可代码里明明是写死的呀
这里的随机端口是调试器属性里给写死了host为localhost,端口没指定就是随机的
如果我们想要从代码指定,那需要做:界面最上排的调试→flask属性→调试→删掉localhost使整个调试配置为空
然后将最后一段代码做些修改,一段并一行,红框里的几行代码用app.run(host='0.0.0.0', port=80,debug=False)替代
debug=True或False都行,最终的结果如下,localhost或外网IP或127.0.0.1都可以,而且是固定端口,这才是我要的东西
最后,再强调一点--安全意识!
就在测试的当儿,Web服务就被刷了,网络攻击无处不在,云规则第一条:云是方便的、也是不安全的。