Flask源码阅读(七)——上下文变量

本文深入解析Flask框架中的上下文概念,包括application context和request context。阐述了它们的区别和作用,以及如何通过_RequestContext将两者关联。通过源码分析,展示了Flask如何在每次HTTP请求时创建Request对象,并且讨论了session的处理过程。
摘要由CSDN通过智能技术生成

1.为了避免大良可有可无的参数把视图函数弄得一团糟,Flask使用上下文临时把某些对象变为全局可访问。

上下文(context)分为程序上下文(application)和请求(request context)上下文。

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

程序上下文被推送后,就可以在线程中使用current_app和g变量。同样,请求上下文被推送后,就可以使用request和session变量。
这里需要通俗地解释一下application context与request context:

  1. application 指的就是当你调用app = Flask(__name__)创建的这个对象app;
  2. request 指的是每次http请求发生时,WSGI server(比如gunicorn)调用Flask.__call__()之后,在Flask对象内部创建的Request对象;
  3. application 表示用于响应WSGI请求的应用本身,request 表示每次http请求;
  4. application的生命周期大于request,一个application存活期间,可能发生多次http请求,所以,也就会有多个request

2.源码

class Flask(object):

    def request_context(self, environ):
        """Creates a request context from the given environment and binds
        it to the current context.  This must be used in combination with
        the `with` statement because the request is only bound to the
        current context for the duration of the `with` block.

        Example usage::

            with app.request_context(environ):
                do_something_with(request)

        :params environ: a WSGI environment
        """
        return _RequestContext(self, environ)

在Flask类中,每次请求都会调用这个request_context函数。这个函数则会创建一个_RequestContext对象。

class _RequestContext</
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值