Django:manage命令扩展

每个学习django框架的童鞋都知道如何创建一个django项目和app,这都离不开django-admin.py和manage.py。 django-admin.py是Django的一个用于管理任务的命令行工具,创建project就需要该命令行工具,另外,在每一个Django project中都会有一个manage.py。

想想当初,刚刚接触这些东西的时候,只知道死记硬背(想必很多人跟我一样),其实帮助工具要利用好,就像linux命令,有时候你知道某个命令但是忘记了它参数的含义,可以用帮助工具,用带--help参数执行一下命令,就知道了用法了,当然能记住更好,熟能生巧,没记住也可以利用这些工具。django的django-admin.py和manage.py也有帮助工具(或者说帮助命令),django-admin.py help或python manage.py help,就会知道对应的有哪些命令,比如runserver,startapp,shell等内置命令。其实manage命令可以扩展,我之前也不知道,是今天技术经理叫我写脚本时,我本来想利用MySQLdb模块写脚本,他跟我说可以自定义manage.py扩展命令,快些,而且也可以部署定时计划任务。然后就是找资料学习,编写,发现其实也挺简单的。后来想想,这种方法确实简单便捷很多,因为MySQLdb模块连接数据库,查询数据库都是用原始的sql语句,而且返回的结果也比较奇葩(个人觉得奇葩,返回的是嵌套式元组,类似于(( , , , ,),( , , , ,),)这种,利用起来不太方便,当然它也有优势,查询速度快),所以用起来比较别捏,我们更喜欢用QuerySet API查询数据库,用起来方便。下面来讲讲如何定义自己的manage.py扩展命令吧。

注册manage命令只需要在app中创建一个management/commands路径,Django会自动将该路径下不以’_’开头的文件注册为manage.py的命令。

如下路径:

要注意:__init__.py不能少,没当建一个文件夹(Directory)是,要想django能识别它,
就要在其目录下加一个__init__.py文件,哪怕是空的也行
对于注册的manage.py命令closepicking仅仅需要满足将一个条件 —— 其必须定义一个继承自
BaseCommand或者其子类的Command类
datetime datetime
django.core.management.base BaseCommand
Command(BaseCommand):handle(, days=, *args, **kwargs):
        stock.models StockPicking
        current_date = datetime.now()
        pickings = StockPicking.objects.filter(
          =,
          =,
          =(datetime(,  , ), current_date),
          =)
        p pickings:
            p.date:
                p.date = _fetch_date_from_stockmove(p)
            date_delta = current_date - p.date
            date_delta.days < days:
                p.is_closed = p.save()

_fetch_date_from_stockmove(picking):
    stock.models StockMove
    stockmoves = StockMove.objects.filter(=picking,
    =)
    :
        rv = stockmoves[].date_confirmed
    :
        rv = 
    rv:
        rv = datetime.now()
    rv

这个例子是设置对象的is_closed字段为1。

在测试无误的情况下,此时在执行python manage.py help,你会发现多了一个closepicking命令,说明注册成功

当然Command提供了一个方法用来增加可选的参数——add_arguments()

在上面类Command里加一个add_arguments()函数,如下

def add_arguments(self, parser):

parser.add_argument(‘poll_id‘, nargs=‘+‘, type=int)
        parser.add_argument(‘--delete‘,
            action=‘store_true‘,
            dest=‘delete‘,
            default=False,
            help=‘Delete poll instead of closing it‘)

然后在handle()函数里价格条件判读句,如下

if options[‘delete‘]:
   p.delete()
   
 这种设计就是传入参数如–delete
 
 
 由于技术有限,错误支持请多多指教!
时间: 2024-10-19 21:51:41

Django:manage命令扩展的相关文章

Django扩展自定义manage命令

使用django开发,对python manage.py ***命令模式肯定不会陌生.比较常用的有runserver,migrate... 本文讲述如何自定义扩展manage命令. 1.源码分析 manage.py文件是通过django-admin startproject project_name生成的. 1)manage.py的源码 a)首先设置了settings文件,本例中CIServer指的是project_name. b)其次执行了一个函数django.core.management.

Django分析之如何自定义manage命令

我们都用过Django的manage.py的命令,而manage.py是在我们创建Django项目的时候就自动生成在根目录下的一个命令行工具,它可以执行一些简单的命令,其功能是将Django project放到sys.path目录中,同时设置DJANGO_SETTINGS_MODULE环境变量为当前project的setting.py文件.我们来看一下代码: #!/usr/bin/env python import os import sys if __name__ == "__main__&q

django常用命令有几个

Django是一个基于MVC构造的框架.在python web开发中,我们会经常用到django基础命令,小编总结了七个常用的django命令. 1.创建一个Django Project #使用下面的命令可以创建一个project [email protected]~: django-admin.py startproject mysite #创建好之后可以看到如下的project结构 mysite/ manage.py mysite/ __init__.py settings.py urls.

python例子-Django常用命令

1.新建一个Django项目: django-admin startproject project-name or django-admin.py startproject project-name 2.新建项目木下的一个子app:(是到生成的项目文件夹下) python manage.py startapp app-name or django-admin.py startapp app-name 3.同步数据库: python manage.py syncdb 注意:Django 1.7.1

如何使用Django 启动命令行及执行脚本

使用django启动命令行和脚本,可以方便的使用django框架做开发,例如,数据库的操作等. 下面分别介绍使用方法. django shell的启动 启动命令: $/data/python-virtualenv/apple/bin/python /data/example/apple/manage.py shell 与普通的python 命令行有什么区别? django shell 带有django的配置信息,可以使用django的框架.例如,定义model为Apples,可以直接使用Appl

Django常用 命令

Django常用 命令: 安装: pip install django 指定版本 pip3 install django==2.0 新建项目: django-admin.py startproject mysite 新建APP : python manage.py startapp blog 启动:python manage.py runserver 8080 同步或者更改生成 数据库: python manage.py makemigrations python manage.py migra

CommandExtra.lua --游戏命令扩展

1 --[[作者信息: 2 Command Extra (游戏命令扩展) 3 作者QQ:247321453 4 作者Email:[email protected] 5 修改日期:2014-3-12 6 功能:添加额外的命令.GM命令 7 ]]-- 8 print(">>Script: Command Extra.") 9 10 --[[ 11 .wmsg 内容 GM发送世界消息 12 .be 查看机器人装备 13 .npcbot equips 查看机器人装备 14 .rh

day 2 命令搜索命令 扩展.md

文件搜索命令locate locate/slocate命令 文件查找和比较 locate命令和slocate命令都用来查找文件或目录. locate命令其实是find -name的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/locatedb,这个数据库中含有本地所有文件信息.Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件.为了避免这种情况,可以在使用locate之前,先使用updatedb命

Python学习---Django的request扩展【获取用户设备信息】

关于Django的request扩展[获取用户设备信息] settings.py INSTALLED_APPS = [ ... 'app01', # 注册app ] STATICFILES_DIRS = (os.path.join(BASE_DIR, "statics"),) # 现添加的配置,这里是元组,注意逗号 TEMPLATES = [ ... 'DIRS': [os.path.join(BASE_DIR, 'templates')], ] urls.py from django