2015-07-19 197 views
0

在我的服務器啓動過程中需要執行一組功能。無論路徑是「/」,「/ blog /,」/ blog/post「。出於開發目的,我希望每次運行python manage.py runserver時都會運行此腳本,並且爲了生產目的,我希望此腳本運行期間部署。任何人都知道這可怎麼辦呢?Django應用程序初始化過程

我的劇本是關閉的刮數據,使Facebook的使用Python圖形API和它的一些庫的調用。

+0

您是否考慮過使用芹菜? (http://celery.readthedocs.org/en/latest/django/) – Sentient07

+0

這取決於你的腳本的目的是什麼! –

+0

刮取數據並使用python調用Facebook的Graph API。 – theamateurdataanalyst

回答

0

我建議您使用custom management commands

  1. 初始化創建命令:

    例如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?' 
    
  2. 開發過程中正在運行的服務器創建命令:

    例如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) 
    
  3. 呼叫./manage.py rundevserver而不是./manage.py runserver開發過程中。

  4. ./manage.py initialize_some_stuff添加到您的部署腳本中。

作爲一種替代第三條你也可以override default runserver command和有條件地./manage.py initialize_some_stuff從中:

  1. 添加額外的進口:

    import os 
    
    from django.conf import settings 
    
  2. 覆蓋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) 
    
0

聽起來就像是最快的(如果不是最優雅)解決方案將在腳本的末尾調用「python manage.py runserver」。