打开潘多拉的盒子,让django的请求对象在线程本地可用。

django-pandora的Python项目详细描述


潘多拉半岛

这是潘多拉的盒子。如果你不能忍受 后果。

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.middleware.RequestMiddleware'到您的MIDDLEWARE_CLASSES 设置。然后可以使用box['request']访问请求。

还有另一个中间件将当前用户对象存储在 box['user']。要使用它,请将'pandora.middleware.UserMiddleware'添加到 您的MIDDLEWARE_CLASSES设置,但请确保在之后列出'django.contrib.auth.middleware.AuthenticationMiddleware'

提示

  • 如果您认为 太普通,可能与某些本地名称冲突。只需使用

    >>> import pandora
    >>> pandora.box['request']
    ...
    
  • 即使打开潘多拉的盒子乍一看也不算太邪恶, 请尽量避免它并传递请求对象或任何其他依赖项 在可能的地方。拥有一个全球化的国家会让事情变得更加困难 每个人-尤其是可靠地测试你的代码。

  • 阅读Wikipedia article about Pandora’s box

更改日志

0.1.0

初次发布。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
CentOS上的java Spring Boot简易应用程序需要很长时间才能启动   java如何检查字符串值是否等于null?   收集器中的java映射值。分组方式()   java需要支持Azure AD B2C webapp集成   java如何加入线程以停止它?   java如何使用意图传递类的对象?   java如何在战争环境中发现CDI生产者?   多模块项目中java奇怪的编译器行为   java如何在web应用程序中管理密码?   java从http服务器、filehandler中删除冗余代码   java使用反射来获取泛型类的字段   java Spring MVC/Hibernate/MySQL 400错误请求错误   给定正整数a的java幂为3   在Java中将元素拆分为不同数量的列表?   java展开折叠窗格