在我的服務器啓動過程中需要執行一組功能。無論路徑是「/」,「/ blog /,」/ blog/post「。出於開發目的,我希望每次運行python manage.py runserver
時都會運行此腳本,並且爲了生產目的,我希望此腳本運行期間部署。任何人都知道這可怎麼辦呢?Django應用程序初始化過程
我的劇本是關閉的刮數據,使Facebook的使用Python圖形API和它的一些庫的調用。
在我的服務器啓動過程中需要執行一組功能。無論路徑是「/」,「/ blog /,」/ blog/post「。出於開發目的,我希望每次運行python manage.py runserver
時都會運行此腳本,並且爲了生產目的,我希望此腳本運行期間部署。任何人都知道這可怎麼辦呢?Django應用程序初始化過程
我的劇本是關閉的刮數據,使Facebook的使用Python圖形API和它的一些庫的調用。
我建議您使用custom management commands:
初始化創建命令:
例如app/management/commands/initialize_some_stuff.py
from django.core.management.base import BaseCommand
class Command(BaseCommand):
help = 'Description of your command.'
def handle(self, *args, **options):
# Add your initialization here.
print 'What should I initialize?'
開發過程中正在運行的服務器創建命令:
例如app/management/commands/rundevserver.py
import os
from django.core.management import call_command
from django.core.management.base import BaseCommand
class Command(BaseCommand):
help = 'Description of your command.'
def handle(self, *args, **options):
if not os.environ.get('RUN_MAIN'):
call_command('initialize_some_stuff', *args, **options)
call_command('runserver', *args, **options)
呼叫./manage.py rundevserver
而不是./manage.py runserver
開發過程中。
將./manage.py initialize_some_stuff
添加到您的部署腳本中。
作爲一種替代第三條你也可以override default runserver
command和有條件地./manage.py initialize_some_stuff
從中:
添加額外的進口:
import os
from django.conf import settings
覆蓋handle
方法:
def handle(self, *args, **options):
if os.environ.get('RUN_MAIN') and settings.DEBUG:
call_command('initialize_some_stuff', *args, **options)
super(Command, self).handle(*args, **options)
聽起來就像是最快的(如果不是最優雅)解決方案將在腳本的末尾調用「python manage.py runserver」。
您是否考慮過使用芹菜? (http://celery.readthedocs.org/en/latest/django/) – Sentient07
這取決於你的腳本的目的是什麼! –
刮取數據並使用python調用Facebook的Graph API。 – theamateurdataanalyst