飞道的博客

【Python Web实战】Flask中的用户跟踪技术(Response与Cookie)

292人阅读  评论(0)

我们已经知道,路由函数的返回值会作为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的过期时间。


  
  1. # 向客户端写入Cookie,有效期是20秒。20秒后,Cookie自动失效
  2. response.set_cookie( 'name', 'lining' ,max_age=20);

Cookie的主要目的是用于跟踪客户端浏览器的。当某个浏览器访问了服务端,服务端就会向客户端浏览器写1个或多个Cookie。当该浏览器再次访问服务端时,服务端就会知道这个浏览器曾经访问过服务端。那么这是如何做到的呢?这就涉及到浏览器读取Cookie,并将其通过HTTP请求发送给服务端的过程。浏览器读取Cookie是自动的,不需要我们干涉。但对于服务端程序来说,需要读取从客户端浏览器发过来的Cookie,这就要使用到前面介绍的request变量。


  
  1. # 从客户端读取名为name的Cookie的值,并将读取结果赋给value变量
  2. value = request.cookies. get( 'name');

本例通过根路由获取了Response对象,并返回了这个Response对象。然后通过writeCookie路由函数向客户端写了一个Cookie,最后通过readCookie路由函数从HTTP请求中读取了这个Cookie。


  
  1. from flask import Flask
  2. from flask import request
  3. from flask import make_response
  4. app = Flask(__name__)
  5. # 用于获取并返回Response对象的根路由
  6. @app.route('/')
  7. def index():
  8. response = make_response( '<h1>This document is response text</h1>')
  9. return response
  10. # 向客户端写入Cookie的动态路由
  11. @app.route('/writecookie/<cv>')
  12. def writeCookie(cv):
  13. response = make_response( '<h1>Cookie已经写入</h1>')
  14. # 向客户端写Cookie,有效期是20秒
  15. response.set_cookie( 'cv', cv,max_age= 20);
  16. return response
  17. # 从HTTP请求读取Cookie的路由
  18. @app.route('/readcookie')
  19. def readCookie():
  20. value = request.cookies.get( 'cv');
  21. print(value)
  22. # 如果Cookie过期,输出“Cookie失效”
  23. if value == None:
  24. value = 'Cookie失效';
  25. return value
  26. if __name__ == '__main__':
  27. 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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场