Django 应用程序初始化过程
Django app initialization process
我需要在服务器启动期间执行一组功能。不管路径是“/”、“/blog/”、“/blog/post”。出于开发目的,每次我 运行 [=10] 时,我都希望这个脚本 运行 =] 出于生产目的,我希望在部署期间将此脚本 运行。有人知道如何做到这一点吗?
我的脚本正在抓取数据并使用 python 及其一些库调用 Facebook 的 Graph API。
听起来最快(如果不是最优雅的话)的解决方案是在脚本末尾调用 'python manage.py runserver'。
我建议你使用 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
添加到您的部署脚本。
作为第 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)
我需要在服务器启动期间执行一组功能。不管路径是“/”、“/blog/”、“/blog/post”。出于开发目的,每次我 运行 [=10] 时,我都希望这个脚本 运行 =] 出于生产目的,我希望在部署期间将此脚本 运行。有人知道如何做到这一点吗?
我的脚本正在抓取数据并使用 python 及其一些库调用 Facebook 的 Graph API。
听起来最快(如果不是最优雅的话)的解决方案是在脚本末尾调用 'python manage.py runserver'。
我建议你使用 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
添加到您的部署脚本。
作为第 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)