在manage.py runserver之后如何自动执行代码

时间:2019-05-01 18:08:08

标签: python django python-3.x

运行服务器后,我需要读取一个csv文件。它不能在任何视图中完成,因为它需要预加载才能执行所有视图,因此我需要在“ manage.py runserver”之后立即执行。首先有什么文件可以编写需要执行的代码吗?

2 个答案:

答案 0 :(得分:3)

在django应用程序按照@ salman-arshad的建议运行时,放置在settings.py文件中的代码可能会运行,但这不是最好的方法。根据您所运行的环境,这可能是有问题的甚至是危险的。

第一个问题是应用程序启动时代码将运行两次。实际上,django在启动和运行期间会多次使用settings.py文件。只需将print('Hello world')放在settings.py文件的末尾,您将看到它打印了两次。这意味着代码运行了两次。其次,settings.py文件不能用于运行任意代码。它专用于您的项目设置。第三,如果您尝试从settings.py中的应用程序内部导入任何内容并使用它(例如Model),则会导致错误。因为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

然后在该应用的__init__.py文件中放置以下行

default_app_config = 'app_name.apps.AppNameConfig'

现在此代码将在每次启动时运行,而不会出现问题。

答案 1 :(得分:0)

只需将该脚本添加到<?php if(isset($_POST['submit'])) { echo $_POST['Privilege_Question_Name']; $Privilege_Question_Query = (($_POST['Privilege_Question_Name'] == "Privilege_Question_Value") ? 'Y' : 'N'); echo $Privilege_Question_Query; exit(); } ?> <form method="post" action="" > <span class="float-right">Question Settings&nbsp;&nbsp; <input type="checkbox" name="Privilege_Question_Name" id="Privilege_Question_Id" value="Privilege_Question_Value"/></span> <br /> <input type="submit" class="btn btn-lg btn-info" name="submit" value="Submit"> </form> 文件中。因为是那些在views.py文件之前执行的文件的settings.py文件