Django 自定义管理命令

Django 提供了一组非常实用的命令, 可以通过django-admin.py和pytohn manage.py脚本调用. 关于这个Management Command的一个优点是你可以创建自定义的command来扩展它.当你需要通过终端命令来对程序进行操作的时候, 通过这个管理命令就非常方便了。 在本篇中, 你将学习到如何编写自己的命令并通过manage.py 来调用.

介绍

开始之前我们先熟悉下, Management Command(manage.py)命令行. 可以看到有我们熟悉的startproject,runserver,collectstatic等命令. 通过help命令可以查看完整的命令列表.

现在, 我们开始创建我们自己的自定义命令了, 首先你要在你的APP目录创建management/commands目录. 如下:

调用命令的方式

基本示例

下面一个自定义命令的例子, 获取当前时间的例子.

management/commands/what_time_is_it.py

Django 管理命令由一个 Command 类组成, 这个类继承自 BaseCommand. 命令的处理代码应该在handle() 方法中定义.

然后我们执行测试一下

你可以会问和普通的脚本有什么不同. 其实是这个例子不具有代表性, Django Management 命令的主要优点是handle()方法中, Django 所有的模块都已经加载并准备完毕.这意味着你可以Django的 ORM 模型, 对数据库进行查询, 并与你项目的所有模块或者函数进行交互. 而这些单独的普通脚本是非常麻烦的, 而且通过这种方式会让代码组织更加紧凑.

处理参数

参数处理部分使用了argparse, 属于标准库里面的包,我们应该定义一个名为add_arguments的方法.

位置参数

下面举例创建随机用户实例的命令, 他接受一个total参数, 作用定义该命令创建的随机用户数.

management/commands/create_users.py

怎么使用?

可选参数

可选参数可以按照任何顺序传递,下面举例对随机创建的用户加上前缀.

management/commands/create_users.py

使用?

or

如果使用--prefix用户名会创建为custom_user_oYwoxtt4vNHR如果不使用前缀则创建为oYwoxtt4vNHR.

Flag 参数

另一种参数是 flag 参数, 用于处理布尔值, 当使用的时候则为 True. 下面具体添加--adminflag , 用于创建随机的管理员用户实例. 如果不指定这个 flag, 则创建普通的用户实例.

management/commands/create_users.py

使用?

or

任意长度列表参数

下面举例创建一个新命令delete_users, 它接受一个 ID 列表, 用户删除指定用户.

management/commands/delete_users.py

使用?

我们也可以通过空格分割, 传递 ID 列表. 删除多个用户

Ansi颜色字符

可以输出带有颜色的字符, 让输出更加直观.

management/commands/delete_users.py

用法和以前一样, 区别在于输出的信息.

输出

下面是所有样式的列表, 请挑选使用

定时任务

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181127G1EXWM00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券