我应该在 Django 应用程序中将“初始化代码”放在哪里?

问题描述 投票:0回答:1

我希望 Django 应用程序中的某些代码仅在服务器启动时执行一次,而不是每个请求执行一次。

具体来说,我想将一些数据库表加载到内存中。这些表包含一些不会根据请求更改的“元数据”。像这样:

ProductTypesData = None;
def loadProductTypesData():
     productTypes = ProductType.objects.all();
     for ptype in productTypes:
         ptype_data = {
             "id":ptype.id,
             "name": ptype.name,
             "description":ptype.desc
         };
         ProductTypesData.append(ptype_data);
loadProductTypesData();

我应该把这个代码放在哪里? 其他关于 django 初始化的 Q/A 建议将其放在 urls.py 中。但在 urls.py 中导入模型对我来说似乎不合逻辑。

我可以将代码放在 models.py 中吗?它是否只执行一次(如果可以接受不在 django 启动时执行)?

python django web
1个回答
0
投票

不要将初始化代码直接放在 models.py 中,因为它可能会运行多次,而这不是您想要的。相反,您可以在 Django app.py 中使用 ready() 方法。这样,您的代码将在 Django 服务器启动时仅运行一次,确保一切设置正确。 Django 应用程序的 AppConfig 类中的 ready() 方法是一个特殊函数,在 Django 启动时会自动调用。在准备好处理请求之前,您可以使用此方法执行应用程序所需的任何初始化任务

© www.soinside.com 2019 - 2024. All rights reserved.