Python Flask 上下文详解

Step1:什么是上下文

上下文相当于一个容器,保存了 Flask 程序运行过程中的一些信息。Flask 中有两种上下文,请求上下文(request 和 session )和应用上下文(current_app和g)。

 

Step2:上下文的使用说明

  • request:请求对象,封装了客户端发出的http请求中的内容
  • session:用户会话,用于存储请求之间需要‘记住‘的值的词典
  • current_app:当前激活程序的程序实例
  • g:处理请求时用作临时存储的对象。每次请求会重设这个变量

 

Step3:上下文代码示例

 1 from flask import request,Flask,current_app,session,g
 2 from datetime import timedelta
 3 import os
 4  
 5 app = Flask(__name__)
 6 app.config['SECRET_KEY'] = os.urandom(24)
 7 app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7)  # 配置7天有效
 8  
 9 #测试请求上下文request
10 @app.route('/request_context')
11 def request_context():
12     user_agent = request.headers.get("User-Agent")
13     # return "<p>Your browser is %s</p>" % user_agent
14     return f"<h1>Hello World!</h1>\nHello World!{user_agent}"
15  
16 #测试应用上下文current_app
17 @app.route("/currentapp_context")
18 def currentapp_context():
19     return "hello %s" % current_app.name
20  
21 # 设置session
22 @app.route('/set_session')
23 def set_session():
24     session['username'] = 'steven'  # 设置“字典”键值对
25     session['password'] = '123456'
26     session.permanent = True  # 设置session的有效时间,长期有效,一个月的时间有效,
27     return 'login success'
28  
29 # 获取session
30 @app.route('/get_session')
31 def get_session():
32     # 第一种session获取如果不存在会报错
33     # session['username']
34     # 推荐使用session.get('username')
35     # session.get('username')
36     return session.get('password')
37  
38 # 删除session
39 @app.route('/delete_session/')
40 def delete_session():
41     print(session.get('username'), session.pop('username', None))
42     # 或者 session['username'] = False
43     print(session.get('username'))
44     return "delete session is success"
45  
46  
47 #清除session中所有数据
48 @app.route('/clear_session')
49 def clear_session():
50     print(session.get('username'))
51     # 清除session中所有数据
52     session.clear
53     print(session.get('username'))
54     return 'clear session is success'
55  
56 #定义了一个方法,用g来获取一个name的值
57 def test_g():
58     return g.get('name',"no name")
59  
60  
61 #测试应用上下文g
62 @app.route('/testG')
63 def test():
64     g.name = '张三'
65     test_g()
66     return test_g()
67  
68 #定义了一个提交的form
69 @app.route('/testRequest')
70 def test1():
71     return '<form action="/getUser" method="get">  ' \
72            '<input type="text" name="username" value="">  ' \
73            '<input type="submit" value="提交">  ' \
74            '</form>'
75  
76 #测试请求上下文request
77 @app.route('/getUser',methods=['GET'])
78 def getUser():
79     username=request.values.get('username')
80     return "my name is "+username
81  
82 if __name__ == '__main__':
83     app.run(debug=True)

欢迎关注【无量测试之道】公众号,回复【领取资源】
Python编程学习资源干货、
Python+Appium框架APP的UI自动化、
Python+Selenium框架Web的UI自动化、
Python+Unittest框架API自动化、
资源和代码 免费送啦~
文章下方有公众号二维码,可直接微信扫一扫关注即可。

备注:我的个人公众号已正式开通,致力于测试技术的分享,包含:大数据测试、功能测试,测试开发,API接口自动化、测试运维、UI自动化测试等,微信搜索公众号:“无量测试之道”,或扫描下方二维码:

Python Flask 上下文详解


添加关注,让我们一起共同成长!

上一篇:StreamingPro 可以暴露出原生API给大家使用


下一篇:StreamingPro 简化流式计算配置