Nel*_*uis 0 python django python-3.x
我需要在运行服务器后立即读取 csv 文件。它不能在任何视图中完成,因为它需要预加载以执行所有视图,所以我需要在“manage.py runserver”之后立即执行。是否有任何文件可以编写我需要首先执行的代码?
settings.py当 Django 应用程序如@salman-arshad 所建议的那样,放入文件中的代码可能会运行,但这不是最好的方法。根据您运行的环境,它可能有问题甚至危险。
第一个问题是应用程序启动时代码会运行两次。实际上,Djangosettings.py在启动和运行过程中会多次使用该文件。只需放在文件print('Hello world')的末尾,settings.py您就会看到它打印了两次。这意味着代码运行了两次。其次,该settings.py文件不用于运行任意代码。它专用于您的项目设置。第三,如果您尝试从 settings.py 中的应用程序中导入任何内容并使用它(例如模型),则会导致错误。因为 Django 的内部应用程序注册表还没有准备好。
所以运行此类代码的最佳位置是在类的ready钩子中AppConfig。在任何 Django 应用程序中,都有一个apps.py定义配置类的文件。您可以覆盖其中的ready功能。当您像这样启动应用程序时,此功能将只运行一次。假设您有一个名为app_name
class AppNameConfig(AppConfig):
name = 'app_name'
def ready(self):
pass
# write your startup code here you can import application code here
#from app_name.models import MyModel
Run Code Online (Sandbox Code Playgroud)
然后将以下行放在该应用程序的__init__.py文件中
default_app_config = 'app_name.apps.AppNameConfig'
Run Code Online (Sandbox Code Playgroud)
现在,这段代码将在每次启动时运行,没有问题。
| 归档时间: |
|
| 查看次数: |
2486 次 |
| 最近记录: |