通过使django的请求对象在线程局部可用来开启潘多拉的盒子。
项目描述
django-pandora
这是潘多拉的盒子。如果你不能接受后果,请不要打开它。
django-pandora 是一个django的实用库,它允许你轻松地将值存储在线程局部中。这使得引入线程安全的全局变量成为可能,这些变量不会干扰服务器上的其他请求。
然而,全局状态是软件开发中常见的反模式,你通常希望避免它。但最终,它可能是解决你一些问题的最简单方法。
django-pandora 的最常见用途可能是将当前请求存储在潘多拉的盒子中,以便在代码中某些地方使用,这些地方没有将请求作为参数传递。
安装
pip install django-pandora
将 'pandora.middleware.RequestMiddleware' 添加到你的 MIDDLEWARE_CLASSES 设置中。 (可选)
用法
pandora.box 对象实现了一个类似dict的接口,你可以使用它来存储线程局部值。使用起来非常简单,就像使用字典一样
>>> from pandora import box >>> box['foo'] = 'Hello world!' >>> box['foo'] 'Hello world!' >>> 'foo' in box True >>> 'bar' in box False >>> box['bar'] Traceback (most recent call last): ... KeyError: 'bar' >>> box.get('bar', None) None
如上所述,您可能想使用盒子来存储当前的请求对象。Pandora附带了一个用于此目的的自定义中间件。只需将'pandora.middleware.RequestMiddleware'添加到您的MIDDLEWARE_CLASSES设置中。然后您可以使用box['request']来访问请求。
还有一个中间件可以将当前用户对象存储在box['user']中。要使用此中间件,请将'pandora.middleware.UserMiddleware'添加到您的MIDDLEWARE_CLASSES设置中,但请确保它排在'django.contrib.auth.middleware.AuthenticationMiddleware'之后。
提示
如果您认为“盒子”这个名字太通用,可能会与您的某些本地名称冲突,则无需将“盒子”对象导入到您的模块中。只需使用
>>> import pandora >>> pandora.box['request'] ...
即使打开潘多拉的盒子看起来可能并不那么邪恶,但请尽量避免这样做,并在可能的情况下传递请求对象或其他依赖项。全局状态会使事情对每个人来说都更加困难——尤其是对可靠测试您的代码来说。
变更日志
0.1.0
初始发布。
项目详情
django-pandora-0.1.0.tar.gz 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 1b278d9cc8882f6b56d24937e544ff7caa2028444bb50196c30db26e19a950a7 |
|
MD5 | 5543669b9d1dfbb51ae58eea6c4678d7 |
|
BLAKE2b-256 | bd4e64762278dedc96e8e521eaffb2cd9fe7df744fecf90b23e27927499201df |