打开潘多拉的盒子,让django的请求对象在线程本地可用。
django-pandora的Python项目详细描述
潘多拉半岛
这是潘多拉的盒子。如果你不能忍受 后果。
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.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
初次发布。