Django:应用级变量

时间:2016-09-14 12:46:57

标签: python django django-rest-framework global-variables

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

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

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

我环顾四周寻找它&有多个解决方案,每个都有一些缺点。以下是一些:

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

    另外,我不知道汇集一个pooler有多聪明? (:P)

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

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

  4. 要在views.py中保持全局,但也不鼓励。
  5. 存储此类应用/全局级别变量的最佳位置是什么?

1 个答案:

答案 0 :(得分:0)

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

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