跳转到主要内容

通过使django的请求对象在线程局部可用来开启潘多拉的盒子。

项目描述

django-pandora

这是潘多拉的盒子。如果你不能接受后果,请不要打开它。

django-pandora 是一个django的实用库,它允许你轻松地将值存储在线程局部中。这使得引入线程安全的全局变量成为可能,这些变量不会干扰服务器上的其他请求。

然而,全局状态是软件开发中常见的反模式,你通常希望避免它。但最终,它可能是解决你一些问题的最简单方法。

django-pandora 的最常见用途可能是将当前请求存储在潘多拉的盒子中,以便在代码中某些地方使用,这些地方没有将请求作为参数传递。

安装

  1. pip install django-pandora

  2. '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 (4.4 kB 查看散列)

上传时间