加拿大网站后缀wordpress从入门
web/
2025/9/28 16:04:26/
文章来源:
加拿大网站后缀,wordpress从入门,北京购物网站建设公司,个人域名注册需要哪些条件请求上下文和应用上下文详解 一、背景二、什么是上下文2.1、请求上下文2.2、应用上下文2.3、两种上下文的底层逻辑 三、写在最后 一、背景
在如何实现异步发送邮件的时候#xff0c;遇到过这样一个报错
RuntimeError: Working outside of request context.This typically me… 请求上下文和应用上下文详解 一、背景二、什么是上下文2.1、请求上下文2.2、应用上下文2.3、两种上下文的底层逻辑 三、写在最后 一、背景
在如何实现异步发送邮件的时候遇到过这样一个报错
RuntimeError: Working outside of request context.This typically means that you attempted to use functionality that
needed an active HTTP request. Consult the documentation on testing
for information about how to avoid this problem.当时虽然是在请求里使用的curent_app方法已经有了请求上下文和应用上下文但是任然报错终究原因是没有记住文档上说的current_app的含义它只是个代理每个线程都是隔开的一个线程一个id它是根据id去找的就好比说一开始current_app的id是1然后新开了一个线程新线程的id是2那我在2里使用1肯定就找不到喽如何解决文档上也有说使用current_app._get_current_object()就可以了 代码里就是这样而不是直接传递current_app
二、什么是上下文
上下文是 context 直译的叫法在程序中用来表示代码执行过程中所处的前后环境比如在文件操作时文件需要打开关闭而文件读写操作就处于文件操作的上下文环境中。
Flask中有两种上下文请求上下文文档点这里查看和应用上下文文档点这里查看 1、请求上下文Request Context当处理请求时请求相关的信息会被存储在请求上下文中例如请求参数、请求头、请求方法、当前的URL以及与请求相关的其他信息。请求上下文可以通过request对象访问。 2、应用上下文Application Context应用上下文包含了关于应用的配置和状态的信息例如配置对象、数据库连接、注册的蓝图等。在应用上下文中可以使用current_app和g对象访问这些信息。
请求上下文和应用上下文是由Flask的调用栈自动创建和销毁的不需要手动处理
2.1、请求上下文
在 flask 中可以直接在视图函数中使用 request 这个对象进行获取相关数据而 request 就是请求上下文的对象保存了当前本次请求的相关数据请求上下文对象有request、session
request封装了HTTP请求的内容针对的是http请求。举例user request.args.get(‘user’)获取的是get请求的参数。session用来记录请求会话中的信息针对的是用户信息。举例session[‘name’] user.id可以记录用户信息。还可以通过session.get(‘name’)获取用户信息。
2.2、应用上下文
它的字面意思是 应用上下文但它不是一直存在的它只是request context 中的一个对 app 的代理(人)所谓local proxy。它的作用主要是帮助 request 获取当前的应用它是伴 request 而生随 request 而灭的。 类型是LocalProxy像全局变量一样工作但只能在处理请求期间且在处理它的线程中访问返回的栈顶元素不是应用上下文而是flask的应用实例对象。
应用上下文的封装 flask核心对象和外部协作对象在flask封装对象上再添加push、pop等请求上下文同理 应用上下文是存放到一个 LocalStack 的栈中。和应用app相关的操作就必须要用到应用上下文。
2.3、两种上下文的底层逻辑
两者的底层逻辑可以参考这里大佬详解1和大佬详解2以为已经有了请求上下文为什么还要有应用上下文这大佬的文章里也有解释
三、写在最后
这是我比较懒的一次因为太偏底层我也讲述不出来只能前人栽树后人乘凉了哈
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/83408.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!