我们已经知道,路由函数的返回值会作为HTTP响应信息返回给客户端。不过如果要对HTTP响应信息做更复杂的操作,如设置HTTP响应头,就需要获得HTTP响应对象,也就是Response对象。
获取Response对象需要导入flask模块的make_response函数,该函数用于返回一个flask.wrappers.Response对象,然后路由函数直接返回这个Response对象即可。
Response对象有很多常用的场景,例如,可以通过Response对象向客户端写入Cookie。相信编写过Web应用的读者应该对Cookie很了解。Cookie其实就是服务端向客户端浏览器写入的一段文本信息(最大是4KB),那么服务端是怎么通知客户端要写入什么的?其实就是通过HTTP响应头向客户端浏览器发送要写入的Cookie信息。也就是说,在服务端写入Cookie的操作就是设置HTTP响应头,这就要用到Response对象中的set_cookie方法。该方法需要传入3个参数。第1个参数是Cookie的key,第2个参数是Cookie的值,第3个参数是Cookie的过期时间。
-
# 向客户端写入Cookie,有效期是20秒。20秒后,Cookie自动失效
-
response.set_cookie(
'name',
'lining' ,max_age=20);
Cookie的主要目的是用于跟踪客户端浏览器的。当某个浏览器访问了服务端,服务端就会向客户端浏览器写1个或多个Cookie。当该浏览器再次访问服务端时,服务端就会知道这个浏览器曾经访问过服务端。那么这是如何做到的呢?这就涉及到浏览器读取Cookie,并将其通过HTTP请求发送给服务端的过程。浏览器读取Cookie是自动的,不需要我们干涉。但对于服务端程序来说,需要读取从客户端浏览器发过来的Cookie,这就要使用到前面介绍的request变量。
-
# 从客户端读取名为name的Cookie的值,并将读取结果赋给value变量
-
value = request.cookies.
get(
'name');
本例通过根路由获取了Response对象,并返回了这个Response对象。然后通过writeCookie路由函数向客户端写了一个Cookie,最后通过readCookie路由函数从HTTP请求中读取了这个Cookie。
-
from flask
import Flask
-
from flask
import request
-
from flask
import make_response
-
-
app = Flask(__name__)
-
# 用于获取并返回Response对象的根路由
-
@app.route('/')
-
def index():
-
response = make_response(
'<h1>This document is response text</h1>')
-
return response
-
# 向客户端写入Cookie的动态路由
-
@app.route('/writecookie/<cv>')
-
def writeCookie(cv):
-
response = make_response(
'<h1>Cookie已经写入</h1>')
-
# 向客户端写Cookie,有效期是20秒
-
response.set_cookie(
'cv', cv,max_age=
20);
-
return response
-
# 从HTTP请求读取Cookie的路由
-
@app.route('/readcookie')
-
def readCookie():
-
value = request.cookies.get(
'cv');
-
print(value)
-
# 如果Cookie过期,输出“Cookie失效”
-
if value ==
None:
-
value =
'Cookie失效';
-
return value
-
if __name__ ==
'__main__':
-
app.run()
运行程序,然后在浏览器地址栏中输入下面的地址,会得到如图1所示的输出内容。
图1 路由函数返回Response对象
接下来在浏览器地址栏中输入下面的地址,将值为hello的Cookie写入客户端,会在浏览器中输出如图2所示的内容。
图2 写入Cookie
最后在浏览器地址栏中输入下面的地址来读取Cookie,会在浏览器中输出如图3所示的内容。
图3 读取Cookie
由于Cookie的有效期是20秒,所以等待20秒后,再刷新页面,会看到在浏览器上输出如图4所示的信息。
图4 Cookie失效
转载:https://blog.csdn.net/nokiaguy/article/details/115503106