zoukankan      html  css  js  c++  java
  • 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>
    Hello 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自动化测试等,微信搜索公众号:“无量测试之道”,或扫描下方二维码:


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

  • 相关阅读:
    20169203 2016-2017-2 《网络攻防实践》第七周学习总结
    20169203 2016-2017-2 《网络攻防实践》第六周学习总结
    20169203 2016-2017-2 《网络攻防实践》 第五周学习总结
    ubuntu hadoop环境搭建
    weka环境配置
    20169207 2016-2017-2 《网络攻防实践》课程总结
    20169207 2016-2017-2 《移动平台应用开发实践》第十四周作业
    20169207 2016-2017-2《网络攻防实践》第十四周作业
    20169207 2016-2017-2《移动平台开发应用实践》第十三周作业
    20169207《移动平台应用开发实践》2016-2017-2 第十二周作业
  • 原文地址:https://www.cnblogs.com/Wu13241454771/p/15434609.html
Copyright © 2011-2022 走看看