我想在 Django 启动时初始化一些变量(来自数据库)。
我能够从数据库中获取数据,但问题是我应该如何调用初始化方法。这应该只调用一次。
尝试查看其他页面,但找不到答案。
代码目前看起来像这样::
def get_latest_dbx(请求,....):
#从数据库中获取数据
def get_latest_x(请求):
get_latest_dbx(请求,x,...)
def 启动(请求):
get_latest_x(请求)
我想在 Django 启动时初始化一些变量(来自数据库)。
我能够从数据库中获取数据,但问题是我应该如何调用初始化方法。这应该只调用一次。
尝试查看其他页面,但找不到答案。
代码目前看起来像这样::
def get_latest_dbx(请求,....):
#从数据库中获取数据
def get_latest_x(请求):
get_latest_dbx(请求,x,...)
def 启动(请求):
get_latest_x(请求)
有人建议(仅在 Django 启动 ONCE 时执行代码?)在顶级 urls.py 中调用该初始化(这看起来不寻常,因为 urls.py 应该处理 url 模式)。通过编写中间件还有另一种解决方法:在哪里放置 Django 启动代码? 但我相信大多数人都在等待解决问题。
更新:
由于OP已经更新了问题,似乎中间件方式可能更好,因为他实际上需要一个request
启动对象。所有启动代码都可以放在自定义中间件的process_request
方法中,其中request
对象在第一个参数中可用。在这些启动代码执行后,可能会设置一些标志以避免稍后重新运行它们(引发MiddlewareNotUsed
异常仅适用于__init__
不接收request
参数的 )。
顺便说一句,OP 的要求看起来有点奇怪。一方面,他需要在 Django 启动时初始化一些变量,另一方面,他需要request
在初始化时使用对象。但是当 Django 启动时,可能根本没有传入请求。就算有,也没多大意义。我猜他真正需要的可能是为每个会话或用户做一些初始化。
there are some cheats for this. The general solution is trying to include the initial code in some special places, so that when the server starts up, it will run those files and also run the code.
Have you ever tried to put print 'haha'
in the settings.py files :) ?
Note: be aware that settings.py runs twice during start-up