2011-11-29 116 views
0

當devserver啓動時,我需要執行一些代碼。Django:啓動devserver時執行一些代碼

此刻,我只是將代碼放入我的一個應用程序中的models.py

此解決方案有一個副作用:代碼在執行其他管理命令時執行,我想避免它。

更新:這將是可分發應用程序的一部分。我不希望用戶(實際開發人員)運行任何其他命令。他們應該只能使用runserver命令。我也不想用我自己的實現來覆蓋runserver命令。

更新時間:models.py看起來是這樣的:

from django.conf import settings 

if settings.DEBUG: # I actually use another setting here, but it does not matter 
    run_my_code_in_a_daemon_thread() 

我沒有任何實際的車型在這個文件中。所以,我的代碼只執行一次:當Django掃描來自INSTALLED_APPS的所有應用程序並導入它們的models.py

回答

2

自定義bash(python)啓動器會沒事的。或者你可以寫自己的management command

+0

尼斯不知道有關管理命令.. – jro

+0

我不想使用另一個命令或腳本,我需要代碼在devserver啓動時自動運行 –

+0

@AndreyFedoseev你的代碼需要以某種方式啓動,所以你應該寫一個啓動器,或者你可以檢查你是否(我用'platform.node()'做,但有很多選項) – DrTyrsa

1

您可以簡單地更新您的當地manage.py?檢查是否有被傳遞的參數(你感興趣的runserver,如果確實如此,從那裏執行您想要的代碼事情是這樣的:!

if __name__ == "__main__": 
    if sys.argv[1] == 'runserver': 
     # Your custom code 
    execute_manager(settings) 
+0

不適合我。我使用zc.buildout和djangorecipe,它爲我生成manage.py腳本。所以當我重建Django實例時,所有更改都會丟失。 –

+0

在這種情況下,DrTyrsa的答案適用:只需創建一個(引導加載器)腳本,在啓動之前完成你想完成的任務,然後讓它運行'python manage.py runserver'。 – jro