Skip to main content

moregeek program

在重构flask项目的时候对于wsgi中间件和好密钥的规划实战_上进小菜猪的博客-多极客编程

##手动推入一个上下文
如果尝试访问应用程序上下文之外的当前内容_应用程序或此对象的任何使用都将收到此错误消息:


RuntimeError: Working outside of application context.

This typically means that you attempted to use functionality that
needed to interface with the current application object in some way.
To solve this, set up an application context with app.app_context().

如果在配置应用程序(例如初始化扩展)时看到这样的错误消息,则可以手动推送上下文以访问应用程序。在with语句上下文()上下文管理器对象中使用app,块中运行的所有代码都可以访问current app:


def create_app():
   app = Flask(__name__)

   with app.app_context():
       init_db()

   return app

代理对象注意事项


一些Flask对象是其他对象的代理。在每个工作线程中,以相同的方式访问代理对象。在内部实现中,代理对象指向唯一绑定到工作者的对象。详细信息见本页。 大多数时候,这些细节不需要担心。但有时最好知道这个对象实际上是一个代理: 代理对象无法模拟它实际指向的对象类型。如果要检查实例,应检查代理对象本身。 使用代理对象的引用时,例如发送信号或将数据传递给后台线程。 如果需要访问底层代理对象,请使用_get_current_object():


app = current_app._get_current_object()
my_signal.send(app)

虚拟环境


使用虚拟环境,可以在开发环境和生产环境中管理项目依赖关系。 虚拟环境解决了哪些问题?拥有的Python项目越多,就越可能需要使用不同版本的Pytython包,甚至Python本身。一个项目使用的库的新版本可能会破坏其他项目的兼容性。 虚拟环境是Python库的独立集合,每个项目对应一个虚拟环境。安装在一个项目中的包不会影响其他项目或操作系统级包。 Python的内置venv模块可用于创建虚拟环境。


> mkdir myproject
> cd myproject
> py -3 -m venv venv

信息闪光灯


一个好的应用程序和用户界面有很好的反馈,否则用户以后会讨厌这个应用程序。烧瓶通过闪光系统提供了一种易于使用的反馈方法。闪存系统的基本工作原理是在请求结束时记录一条消息,并仅为下一个请求提供该消息。布局模板通常用于显示闪烁消息。 Flash()用于闪烁消息。在模板中,使用get_flashd_ Messages()操作消息。有关完整示例,请参见闪烁消息


集成WSGI中间件


如果要向应用程序添加WSGI中间件,可以打包内部WSGI应用程序。假设您想使用Werkzeug包中的中间件来解决lighttpd错误,那么可以这样做


from werkzeug.contrib.fixers import LighttpdCGIRootFix
app.wsgi_app = LighttpdCGIRootFix(app.wsgi_app)

请求对象


请求对象在API部分中有详细描述,这里不再详细讨论(请参阅请求)。在这里,我们简单地谈谈最常见的操作。首先,必须从烧瓶模块导入请求对象: 来自烧瓶进口请求 您可以使用method属性操作当前请求方法,并使用form属性处理表单数据(POST或PUT请求中传输的数据)。下面是使用上述两个属性的示例:


@app.route('/login', methods=['POST', 'GET'])
def login():
   error = None
   if request.method == 'POST':
       if valid_login(request.form['username'],
                      request.form['password']):
           return log_the_user_in(request.form['username'])
       else:
           error = 'Invalid username/password'
   # the code below is executed if the request method
   # was GET or the credentials were invalid
   return render_template('login.html', error=error)

当键不存在于表单属性中时会发生什么?将引发KeyError。如果未将KeyError捕获为标准错误,将显示HTTP 400错误请求错误页面。因此,在大多数情况下,不必处理这个问题。 args属性可用于操作URL中提交的参数(例如?Key=value): searchword=request.args。get('key','') 用户可能会更改URL,导致400请求错误页面,这会降低用户友好度。因此,我们建议使用get或捕获KeyError来访问URL参数。


如何生成好密钥


生成随机数的关键是一个好的随机种子,所以一个好密钥应该具有足够的随机性。操作系统可以基于密码随机生成器以多种方式生成随机数据。使用以下命令快速创建Flask secret_Key(或secret_Key)生成值:


$ python -c 'import os; print(os.urandom(16))'
b'_5#y2L"F4Q8z\n\xec]/'

基于cookie的会话描述:Flask将检索会话对象中的值,序列化该值并将其存储在cookie中。当一个cookie被打开时,如果您需要查找一个值,但该值没有连续存储在请求中,您将不会收到一条清晰的错误消息。请检查页面响应中的cookie大小是否与web浏览器支持的大小一致。 除了默认的客户端会话之外,还有许多支持服务器会话的Flask扩展。


©著作权归作者所有:来自51CTO博客作者上进小菜猪的原创作品,请联系作者获取转载授权,否则将追究法律责任

opengles:如何加载着色器代码_北洋的博客-多极客编程

加载着色器程序: 参考链接: https://juejin.cn/post/7134356782452834334 对应于代码实现: ps:一个是着色器对象,表示一段具体的着色器代码的抽象,另一个是着色器程序,表示整个图形渲染管线的着色器程序集合 initShader(vertexSimpleShape, GL_VERTEX_SHADER); initShader(fragSimpleShape,

顶点着色器的绘制操作_北洋的博客-多极客编程

将数据传入图形渲染管线 着色器内部有些属性是在其渲染的过程中取出进行判断如何渲染的,比如顶点着色器当中就有个aPosition属性代表的是【顶点属性数组】,记住是顶点属性的数组,不单单只是顶点坐标这一个属性,但是最起码要包含坐标这一个属性,初次之外还可以添加坐标转换等属性,再比如片段着色器中也有个属性决定着片段的最终颜色 顶点处理器的操作 Opengl采用GLSL的语言用于编写Sharder着色器

gradle定义使用插件_北洋的博客-多极客编程

插件编写: 插件(逻辑任务的集合),如果需要将一系列任务复用的话,定义一个插件里面写上这些任务。其他项目只要引用这个插件即可,不需要重新写这些任务 定义插件 创建类实现Plugin接口重写apply接口,task是project的一个方法。 应用插件 apply plugin:插件类名(调用apply方法传入plugin值) apply([plugin:插件类名])等价于方法调用传入map参数 当

linux入门-结构与命令【长期更新】_上进小菜猪的博客-多极客编程

一.Linux入门简单介绍 内蒙古科技大学计算机科学与技术20级-企业课(Linux操作系统)听课知识点记录。 Linux是一个免费的、类似UNIX的开源操作系统。该操作系统的内核于1991年10月5日由Linus Torvalds首次发布。通过用户空间应用程序,它成为了Linux操作系统。Linux也是自由软件和开源软件开发中最著名的例子。只要遵循GNU通用公共许可证(GPL),任何个人和组织都

重构 flask 服务端项目对于 sql 的配置使用和延迟的请求回调巧妙设计运用_上进小菜猪的博客-多极客编程

一. Flask-SQLAlchemy SQLAlchemy的声明扩展是使用SQLAlchemy的最新方法,可以像Django一样在一个位置定义表和模型,然后在任何地方使用。 from sqlalchemy import create_engine from sqlalchemy.orm import scoped_session, sessionmaker from sqlalchemy.ext

flutter开发之scaffold组件快速开发app_亦可追寻的博客-多极客编程

Scaffold包括的属性 const Scaffold( {Key? key, PreferredSizeWidget? appBar, Widget? body, Widget? floatingActionButton, FloatingActionButtonLocation? floatingActionButtonLocation, FloatingActionButtonAnimat

#yyds干货盘点#【愚公系列】2022年10月 微信小程序-component组件的扩展_qq61972345e36b7的博客-多极客编程

一、Component组件的扩展 // behavior.js module.exports = Behavior({ definitionFilter(defFields) { defFields.data.from = 'behavior' }, }) // component.js Component({ data: { from: 'component'

鸿蒙开发工具 deveco studio 3.0 体验与项目结构介绍_宇宙之一粟的漂泊之旅的博客-多极客编程

开发工具介绍HuaWei DevEco Studio 是基于 IntelliJ IDEA Community 开源版本打造,面向全场景多设备,提供一站式的应用/服务集成开发环境(IDE),支持分布式多端开发、分布式多端调测、多端模拟仿真,提供全方位的质量与安全保障。DevEco Studio 3.0支持 HarmonyOS 3.0 的应用及服务开发,提供了代码智能编辑、低代码开发、界面调试双向预览

#yyds干货盘点#【愚公系列】2022年10月 微信小程序-component组件的数据监听器_qq61972345e36b7的博客-多极客编程

一、Component组件的数据监听器 数据监听器可以用于监听和响应任何属性和数据字段的变化,相当于vue中的计算属性。 1.使用数据监听器 有时,在一些数据字段被 setData 设置时,需要执行一些操作。 例如, this.data.sum 永远是 this.data.numberA 与 this.data.numberB 的和。此时,可以使用数据监听器进行相应处理。 Component({

如何在ipad上直接打开并运行github上的代码?_wx6123051953ddd的博客-多极客编程

在2005年,Linus Torvalds开创了一个名为Git的开源版本控制系统。开发者在使用Git作为版本控制系统时,能够获取项目的整个代码库和修改历史。因此,他们也能更轻易地新建分支和合并代码。GitHub正是一个在Git开源版本控制系统上建立的云端代码仓库托管服务商。用户可以在GitHub上免费注册并创建公共的代码仓库,这不仅让个人和小团队能够更好地利用Git进行版本控制和协作,也让GitH

linux入门-结构与命令【长期更新】_上进小菜猪的博客-多极客编程

一.Linux入门简单介绍 内蒙古科技大学计算机科学与技术20级-企业课(Linux操作系统)听课知识点记录。 Linux是一个免费的、类似UNIX的开源操作系统。该操作系统的内核于1991年10月5日由Linus Torvalds首次发布。通过用户空间应用程序,它成为了Linux操作系统。Linux也是自由软件和开源软件开发中最著名的例子。只要遵循GNU通用公共许可证(GPL),任何个人和组织都

#yyds干货盘点#【愚公系列】2022年10月 微信小程序-循环的使用_qq61972345e36b7的博客-多极客编程

一、列表渲染 1.wx:for 的item和index 在组件上使用 wx:for 控制属性绑定一个数组,即可使用数组中各项的数据重复渲染该组件。 默认数组的当前项的下标变量名默认为 index,数组当前项的变量名默认为 item <view wx:for="{{array}}"> {{index}}: {{item.message}} </view> 使用 wx:f