Django:当django启动时只调用一次方法

时间:2013-01-25 06:45:51

标签: python django django-views django-database

我想在Django启动时初始化一些变量(来自数据库)。

我能够从数据库中获取数据,但问题是如何调用initialize方法。这应该只调用一次。

尝试查看其他页面,但找不到答案。

代码目前看起来像这样::


def get_latest_dbx(request,....):

#get数据库中的数据


def get_latest_x(请求):

get_latest_dbx(请求中,x,......)


def启动(请求):

get_latest_x(请求)

2 个答案:

答案 0 :(得分:3)

有人建议(Execute code when Django starts ONCE only?)调用顶级urls.py中的初始化(看起来不寻常,因为urls.py应该处理url模式)。编写中间件还有另一种解决方法:Where to put Django startup code? 但我相信大多数人都在等待ticket被解决。

更新:

由于OP更新了问题,似乎中间件方式可能更好,因为他在启动时实际上需要一个request对象。所有启动代码都可以放在自定义中间件的process_request方法中,其中request对象在第一个参数中可用。在执行这些启动代码之后,可以设置一些标志以避免以后重新运行它们(引发MiddlewareNotUsed异常仅适用于__init__,它不会收到request参数。

顺便说一句,OP的要求看起来有点奇怪。一方面,他需要在Django启动时初始化一些变量,另一方面,他需要初始化中的request对象。但是当Django启动时,可能根本没有传入请求。即使有一个,也没有多大意义。我想他实际需要的可能是为每个会话或用户做一些初始化。

答案 1 :(得分:1)

这有一些骗子。一般的解决方案是尝试在一些特殊的地方包含初始代码,这样当服务器启动时,它将运行这些文件并运行代码。

您是否曾尝试将print 'haha'放入settings.py文件:)?

注意:请注意,settings.py在启动期间运行两次