前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Python Web实战】Flask中的用户跟踪技术(Response与Cookie)

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

作者头像
蒙娜丽宁
发布2021-04-19 15:28:24
7880
发布2021-04-19 15:28:24
举报
文章被收录于专栏:极客起源极客起源

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

代码语言:javascript
复制
# 向客户端写入Cookie,有效期是20秒。20秒后,Cookie自动失效
response.set_cookie('name', 'lining' ,max_age=20);

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

代码语言:javascript
复制
# 从客户端读取名为name的Cookie的值,并将读取结果赋给value变量
value = request.cookies.get('name');

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

代码语言:javascript
复制
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失效

- EOF -

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-04-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 极客起源 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档