首页 > 其他 > 详细

应用上下文和请求上下文

时间:2020-05-27 18:28:10      阅读:34      评论:0      收藏:0      [点我收藏+]

 

应用上下文分别为: current_app, g。 分别是当前的应用实例和请求时用于临时存储数据的对象

请求上下文分别为: request, session。 分别是封装客户端发送所有信息的对象和跨请求之存储的值。

 

主模块代码

from flask import Flask, request

app = Flask(__name__)


@app.route(‘/‘)
def index():
    user_agent = request.headers.get("User-Agent")
    return "<p>Your browser is {}</p>".format(user_agent)

@app.route("/user/<name>")
def user(name):
    return "<h1> Hello, {} !</h1>".format(name)


if __name__ == ‘__main__‘:
    app.run()

  

原理: Flask在分派请求之前先推送应用上下文和请求上下文, 此时就可以使用上述的四个对象,  请求处理完成后会将其删除, 便不能再使用上述四个对象。

 

正常的情况应该是这样:

错误示例:

D:\flaskStudy>set FLASK_APP=flaskStudy.py

D:\flaskStudy>flask shell
App: flaskStudy [production]
Instance: D:\flaskStudy\instance
>>> from flaskStudy import app
>>> from flask import current_app
>>> current_app.name   # 此处应该报错, 因为没有推送应用上下文, 但现在却成功了。
‘flaskStudy‘

 

正确示例:

D:\flaskStudy>flask shell
App: flaskStudy [production]
Instance: D:\flaskStudy\instance
>>> from flaskStudy import app
>>> from flask import current_app
>>> app_ctx = app.app_context()  # 加载应用上下文
>>> app_ctx.push()  # 推送应用上下文件
>>> current_app.name  # 使用应用上下文
‘flaskStudy‘
>>> app_ctx.pop()  # 收回应用上下文

 

按理说正确的做法应该是第二种, 但第一种也成功了, 似乎不需要推送上下文也可以使用上下文对象了。

 

应用上下文和请求上下文

原文:https://www.cnblogs.com/kongzhagen/p/12975189.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!