zoukankan      html  css  js  c++  java
  • 六十八:flask上下文之app上下文和request上下文

    app上下文:

    先看现象

    current_app源码

    手动入栈

    app_context()源码

    with语句入栈

    request上下文

    不在app上下文中

    即使手动入栈也会报错,不在请求上下文中

    url_for()源码

    手动推入请求上下文

    应用上下文和请求上下文都是存放到一个LocalStack的栈中的,和应用app相关的操作就必须用到请求上下文,比如用url_for反转视图函数
    1、在视图函数中,不用担心上下文的问题,因为视图函数要执行,那么肯定是通过访问url方式来执行,这种情况下,flask底层就已经自动把请求上下文和应用上下文都推入到了相应的栈中
    2、如果想要在视图函数外执行相关操作,比如获取当前app(current_app),或者是反转url,则必须手动推入上下文
      1.手动推入app上下文
        第一种方式
          app_context = app.app_context()
          app_context.push()
          print(current_app)
        第二种方式
          with app.app_context():
          print(current_app)
      2.手动推入请求上下文:
      推入请求上下文到栈中,会首先判断有没有应用上下文,如果没有则会先推入应用上下文到栈中,然后再推入请求上下文到栈中
        with app.text_request_context():
          print(current_app)
    3、上下文需要放在栈中的原因
      1.应用上下文
      flask底层是基于werkzeug,werkzeug是可以包含多个app的,所以这个时候用一个栈来保存,如果要使用app1,则app1需在栈的顶部,如果用完了app1,则app1应该从栈中删除,方便其他代码使用下面的app

      2.请求上下文
      如果在写测试代码或者离线脚本的时候,有时候可能需要穿件多个请求上下文,这个时候就需要存放到另一个栈中,使用哪个请求上下文的时候,就把对应的请求上下文放到栈的顶部,用完了就要把这个请求上下文从栈中移除掉

  • 相关阅读:
    Nginx+keepalived高可用配置
    kubespahere安装kubenetes
    Fastdfs原理及集群搭建
    Spark 3.0.3集群安装文档
    Mybatis Plus 代码生成器
    redis集群方案
    Go 语言并发之道
    重构-改善即有代码的设计
    QT线程
    QT中的cout
  • 原文地址:https://www.cnblogs.com/zhongyehai/p/11873967.html
Copyright © 2011-2022 走看看