我需要在服务器启动时执行一系列功能。无论路径是“/”,“/ blog /,”/ blog / post“。出于开发目的,我希望每次运行for
时都能运行此脚本,并且出于生产目的我会喜欢这个脚本在部署期间运行。任何人都知道如何做到这一点?
我的脚本正在抓取数据,并使用python及其一些库调用Facebook的Graph API。
答案 0 :(得分:0)
听起来最快(如果不是最优雅)的解决方案是调用' python manage.py runserver'在脚本的最后。
答案 1 :(得分:0)
我建议您使用custom management commands:
创建初始化命令:
e.g。 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?'
创建在开发期间运行服务器的命令:
e.g。 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
添加到部署脚本中。
作为第3条款的替代方案,您还可以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)