一、请求调度
浏览器通过URL访问Flask服务器时,要通过URL和视图函数的映射关系表找到处理该URL的视图函数(该视图函数返回响应给浏览器),这个映射关系可以通过app.route修饰器建立。下面给出了上一篇文章中的helloworld例子
#coding:utf-8
from flask import Flask
app=Flask(__name__)
@app.route("/")
def index():
return "<h1>Hello World!</h1>"
@app.route("/user/<name>")
def user(name):
return "<h1>Hello,%s</h1>"%name
if __name__=="__main__":
app.run(debug=True,host="0.0.0.0",port=8000)
例子中将程序根目录URL和视图函数index映射起来。可以在python命令行通过app.url_map查看这种映射关系:
HEAD,OPTIONS,GET是URL与视图函数的请求方法,HEAD和OPTIONS为Flask自动处理,功能分别为获取响应报文首部(即不发送报文主体)和询问访问某URL支持的方法。 可以通过route修饰器的methods参数为路由指定不同的请求方法,比较常用的是GET和POST方法。
二、程序和请求上下文
视图函数在处理请求时,有时需要获取一些其他对象信息,这个时候的处理方式是使用线程独立的全局变量而非传参,比如请求对象request等(其他上下文全局变量如下表)。上下文可以理解为对这些对象的引用池,方便我们随时访问这些变量。
变量名 | 上下文 | 说明 |
current_app | 程序上下文 | 当前激活的程序实例,比如helloworld例子中的app |
g | 程序上下文 | 用作处理请求时的临时存储,每次请求都重设 |
request | 请求上下文 | 请求对象,包含了客户端HTTP请求的内容,例如获取客户端请求报文头部中包含的 User-Agent信息:request.headers.get("User-Agent") |
session | 请求上下文 | 用户会话,字典格式,存储请求间需要记住的信息 |
从flask中引入上下文变量就可以使用这些变量,例如下面的视图函数返回请求中的User-Agent给客户端:
@app.route("/user-agent/")
def get_user_agent():
user_agent=request.he