Flask入门
一、创建一个简单的例子
from flask import Flask app = Flask(__name__) @app.route('/') def index(): return '<h1>Hello world!</h1>'
这是一个完整的应用,视图函数index使用app.route装饰器来映射到url的路径,在flask中还有一种更传统的方式:使用app.add_url_rule()方法
def index(): return '<h1>Hello world!</h1>' app.add_url_rule('/', 'index', index)
add_url_rule()接收三个参数:url, 端点和视图函数,这里的端点相当与字典中的键。
二、动态路由
@app.route('/<name>') def index(name): return '<h1>Hello {}</h1>'.format(name)
Flask也支持RESTful风格的动态路由,访问http://localhost:5000/wts
可以看到'wts'已经作为参数从路由传递给了视图函数。
三、热重载
Flask的调试模式支持热重载,使用方式是运行flask run命令前执行:
set FLASK_DEBUG=1
也可以在通过编程方式启动的方式中设置:
if __name__ == "__main__": app.run(debug=True)
启用重载器后,flask会监视项目中的所有源码文件,发现变动时自动重启服务,在调试的过程中非常方便。
四、命令行选项
通过执行flask run --help查看。
值得一提的是,默认情况下,flask监听localhost的连接,因此服务器只接收运行服务器的计算机发送的连接,为了让同一网络中的其他计算机发送的连接也能接收到,有两种设置方式:
flask run --host 0.0.0.0
或者
if __name__ == "__main__": app.run(debug=True, host='0.0.0.0')
五、应用请求上下文
from flask import request @app.route('/') def index(): user_agent = request.headers.get('User-Agent') return '<p>{}</p>'.format(user_agent)
注意:request在同一个线程中全局可访问,但不会干扰其他线程。
六、请求钩子
有时在请求之前或之后执行代码会很有用。例如,请求开始时需要创建数据库连接或验证发起请求的用户身份。请求钩子通过装饰器实现,flask支持以下4种钩子:
before_request 注册一个函数,每次请求之前运行。
before_first_request 注册一个函数,只在处理第一个请求之前运行,通常用来执行服务器初始化任务。
after_request 注册一个函数,如果没有未处理的异常抛出,在每次请求之后运行。
teardown_request 注册一个函数,即使有未处理的异常抛出,也在每次请求之后运行,相当于finally。