Django:应用级变量

Pan*_*hal 5 python django global-variables django-rest-framework

我创建了一个Django-rest-framework应用程序。它公开了一些在MySQL DB中执行一些get / set操作的API。

我有一个向另一个服务器发出HTTP请求的要求,并将此响应与通常的响应一起进行。我正在尝试使用自制的HTTP连接池来发出HTTP请求,而不是在每个请求上进行新连接。

保持此应用程序级别HTTP连接池对象最合适的位置是什么?

我一直在寻找它,并且有多种解决方案,每种都有一些缺点。这里有一些:

  1. 在diff文件中创建池的单例类,但这不是执行操作的好方法。关于为什么不使用单例设计模式有各种讨论。

    另外,我不知道合并一个池池有多聪明?(:P)

  2. 要将其保留在应用程序目录的init .py中。问题如下:
    • 它应该只包含导入和与此相关的内容。
    • 对代码进行单元测试将很困难,因为导入将在模拟之前进行,并且实际上将尝试访问API。
  3. 要使用会话,但我想如果这是特定于用户会话的内容(例如特定于用户的号码等)会更有意义

    同样,该对象需要可序列化。我不知道HTTP连接池如何序列化。

  4. 为了使它在views.py中保持全局,也不建议这样做。

存储此类应用程序/全局级别变量的最佳位置是什么?

小智 0

一种可能的解决方案是实现自定义 Django 中间件,如https://docs.djangoproject.com/ja/1.9/topics/http/middleware/中所述。

您可以在中间件的__init__方法中初始化 HTTP 连接池,该方法仅在第一个请求时调用一次。然后,在process_request期间启动 HTTP 请求,并在process_response时检查它是否已完成(或等待)并将该响应附加到内部响应。