Flask是一个使用 Python 编写的轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 。
简单环境搭建
- 最小应用
新建hello.py,代码如下,保存后执行python hello.py,在浏览器访问localhost:5000即可显示
1 2 3 4 5 6 7
| from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello World!' if __name__ == '__main__': app.run()
|
其他技巧
运行参数
程序默认只能从本机访问,若要从其他机器远程访问,就需要使用参数启动程序
若需要开启调试模式,可以使用参数:
路由与参数
- 路由方法:
1 2 3 4 5 6
| @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'POST': do_the_login() else: show_the_login_form()
|
- 参数获取:
1 2 3
| if request.method == 'POST': name = request.form['username'] passwd = request.form['password']
|
1 2 3 4
| @app.route('/user/<username>') def show_user_profile(username): return 'User %s' % username
|
1
| searchword = request.args.get('q', '')
|
1 2 3 4 5 6 7 8
| from flask import request from werkzeug import secure_filename
@app.route('/upload', methods=['GET', 'POST']) def upload_file(): if request.method == 'POST': f = request.files['the_file'] f.save('/var/www/uploads/' + secure_filename(f.filename))
|
- Cookies的读写:
1 2 3
| username = request.cookies.get('username') resp = make_response(render_template(...)) resp.set_cookie('username', 'the username')
|
- 模板使用:
1 2 3 4 5
| from flask import render_template @app.route('/hello/') @app.route('/hello/<name>') def hello(name=None): return render_template('hello.html', name=name)
|
- 跨域支持:
要支持跨域的话只需要做全局配置,安装flask_cors
加入以下代码:
1 2
| app = Flask(__name__) CORS(app, supports_credentials=True)
|
- 配合gevent实现并发访问
之前的代码运行时只有单实例,如果一个请求还在执行,另一个请求就进不来,简单的使用gevent可以实现并发:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| import time from flask import Flask from flask_cors import CORS from gevent import monkey from gevent.pywsgi import WSGIServer
monkey.patch_all()
app = Flask(__name__) CORS(app)
@app.route('/index') def hello_world(): time.sleep(10) return 'Hello World!'
@app.route('/test1') def hello_test1(): return 'Hello World!'
if __name__ == '__main__': http_server = WSGIServer(('0.0.0.0', 5000), app) http_server.serve_forever()
|
访问/index时,加了个延时,请求十秒以后才会响应,但是访问/test1时不会被阻塞,说明请求可以并发了。
有了这些框架,搭建简单的web应用便可以非常迅速了。
上一篇:使用Gradle发布Android类库到JCenter笔记
下一篇:Python开源Web框架Tornado学习笔记