编写Django自定义manage命令
2016-07-13 20:28
441 查看
manage.py是在我们创建Django项目的时候就自动生成在根目录下的一个命令行工具,它可以执行一些简单的命令,其功能是将Django project放到sys.path目录中,同时设置DJANGO_SETTINGS_MODULE环境变量为当前project的setting.py文件。manage.py的代码是这样的:
#!/usr/bin/env python
import os
import sys
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "adl_lrs.settings")
from django.core.management import execute_from_command_line
execute_from_command_line(sys.argv)
excute_from_command_line()函数会根据命令行参数解析出命令的名称,根据命令名称调用相应的Command执行命令。Command位于各个管理模块的commands模块下面。
所以要自定义manage命令,只需要在app下management目录commands目录下建立目标文件。
需要注意的是,不是所有的.py文件都会被识别为命令的,需引用了BaseCommand的才能被正确识别,而且我们的命令类要继承于BaseCommand它才可以。
示例代码:
from django.core.management.base import BaseCommand,CommandError
import datetime
import pytz
class Command(BaseCommand):
def handle(self, *args, **options):
now=datetime.datetime.now()
now=now.replace(hour=0).replace(minute=0).replace(second=0).replace(microsecond=0).replace(tzinfo=pytz.timezone('UTC'))
br1=datetime.datetime(2016,6,29)
br1=br1.replace(hour=0).replace(minute=0).replace(second=0).replace(microsecond=0).replace(tzinfo=pytz.timezone('UTC'))
br2=now
print br1,br2
#!/usr/bin/env python
import os
import sys
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "adl_lrs.settings")
from django.core.management import execute_from_command_line
execute_from_command_line(sys.argv)
excute_from_command_line()函数会根据命令行参数解析出命令的名称,根据命令名称调用相应的Command执行命令。Command位于各个管理模块的commands模块下面。
所以要自定义manage命令,只需要在app下management目录commands目录下建立目标文件。
需要注意的是,不是所有的.py文件都会被识别为命令的,需引用了BaseCommand的才能被正确识别,而且我们的命令类要继承于BaseCommand它才可以。
示例代码:
from django.core.management.base import BaseCommand,CommandError
import datetime
import pytz
class Command(BaseCommand):
def handle(self, *args, **options):
now=datetime.datetime.now()
now=now.replace(hour=0).replace(minute=0).replace(second=0).replace(microsecond=0).replace(tzinfo=pytz.timezone('UTC'))
br1=datetime.datetime(2016,6,29)
br1=br1.replace(hour=0).replace(minute=0).replace(second=0).replace(microsecond=0).replace(tzinfo=pytz.timezone('UTC'))
br2=now
print br1,br2
相关文章推荐
- Pokemon GO对AR行业有什么刺激
- nyoj 30 gone fishing
- 101 Hack 39 B Goodland Electricity locked (线段上的最少点覆盖 贪心)
- 在leangoo 里怎么设置工作量估算,添加附件,设置截止时间?
- Django通用视图讲解
- Windows下安装pip及django的restframework
- google protobuf详解
- POJ 3107 Godfather
- golang中的单元测试
- 关于AlphaGo和机器人云的一些想法
- golang用panic和recover做业务流程中断的尝试
- go tool proof
- Google 的开源技术protobuf 简介与例子
- golang面向对象思想和实现
- 大话设计模式(golang) 四、代理模式
- HDU1533||ZQUOJ23130Going Home最小费用最大流
- django crsf not set问题
- Django AJAX异步提交
- Django - Form类 基础篇
- Django: 新建你的第一个blog应用