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