【Flask】Flask核心机制:current_app

本文深入探讨了Flask框架中的current_app核心机制,包括AppContext和RequestContext的出入栈、线程隔离的LocalStack和LocalProxy。重点讲述了`current_app._get_current_object()`在异步邮件发送中的作用,解释了为何在没有请求环境时仍能使用current_app的原因,并提供了手动和自动管理上下文的示例。
摘要由CSDN通过智能技术生成

原文地址:Flask核心机制:current_app

核心知识

  • AppContext手动、自动入栈
  • LocalStack是线程隔离的栈结构
  • current_app是线程、协程隔离对象
  • LocalProxy是获取当前线程隔离的代理对象

flask中经典错误 working outside application context

错误:
working outside application contex
原因:
在没有获取到应用上下文的情况下,进行了上下文操作。
代码:

from flask import Flask, current_app

app = Flask(__name__)

a = current_app
d = current_app.config['DEBUG']

运行:

AppContext、RequestContext、Flask与Request之间的关系

  1. AppContext
    应用上下文,是对flask一切对象的封装
  2. RequestContext
    请求上下文,是对request请求对象的封装
  3. current_app
    类型是LocalProxy
    像全局变量一样工作,但只能在处理请求期间且在处理它的线程中访问
    返回的栈顶元素不是应用上下文,而是flask的应用实例对象

应用上下文的封装=flask核心对象+和外部协作对象(再flask封装对象上再添加push、pop等)(请求上下文同理)

代码:
F12进入current_app

# context locals
_request_ctx_stack = LocalStack()
_app_ctx_stack = LocalStack()
current_app = LocalProxy(_find_app)
request = LocalProxy(partial(_lookup_req_object, 'request'))
session = LocalProxy(partial(_lookup_req_object, 'session'))
g = LocalProxy(partial(_lookup_app_object, 'g'))

current_app与reques:
current_app和reques都是设计模式中代理设计的代理对象,指向flask核心对象和reques的请求类

详解flask上下文与出入栈

这里写图片描述
在pycharm的flask项目中可以通过:
External Libraries->site-packages->flask->ctx.py</

  • 20
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值