Django使用自定义命令执行数据初始化、定时任务等相关操作 python manage.py xxx

python manage.py xxx自定义参数执行命令实现相关操作

在项目中有一些功能或需求需要通过命令执行,对应用做一些操作或修改,比如项目数据初始化、数据更新、定时任务等,通过执行命令或配置crontab就可以实现需求,下面简单介绍一下Django项目中如何实现相关功能。

比如有需求需要执行一条命令python manage.py init对项目初始化数据,经过查阅资料了解自定义参数存在app/management/commands目录下,在commands创建init.py文件,就可以执行python manage.py init命令运行init.py文件中的逻辑。

官方文档:https://docs.djangoproject.com/en/4.0/howto/custom-management-commands/

创建/management/commands目录

重要: 首先要明确,/management/commands目录一定是在注册的APP的中才会生效,而且/management/commands每个目录下都要有__init__.py文件。

创建test应用,使用django-admin startapp testpython manage.py startapp test命令创建APP,然后按照下面的目录结构在生成的test文件夹下创建managementcommands文件夹,然后每个文件夹内添加__init__.py文件。

具体目录结构如下:

test/
    __init__.py
    models.py
    management/
        __init__.py
        commands/
            __init__.py
            _private.py
            hello_word.py
    tests.py
    views.py

完善hello_word.py文件

已经看到上述目录中有一个hello_word.py文件,按照国际惯例执行python manage.py hello_world输出Hello World!,具体代码如下:

from django.core.management.base import BaseCommand

class Command(BaseCommand):

    # 帮助文本, 一般备注命令的用途及如何使用。
    help = 'Some help texts'

    # 处理命令行参数,可选
    def add_arguments(self, parser):
        pass

    # 核心业务逻辑
    def handle(self, *args, **options):
        self.stdout.write('Hello World!')

代码修改完,这时候当你开心的执行python manage.py hello_world,发现报错而且不好用:

Unknown command: 'hello_world'
Type 'manage.py help' for usage.

这是因为上面提到的/management/commands目录一定是在注册的APP的中才会生效,所以要在setting.py中注册APP:

INSTALLED_APPS = [
    ...
    'test',
]

这时候再执行python manage.py hello_world就好了:

(venv) tutorial>python manage.py hello_world
Hello World!

到这里就可以接着向下看进阶内容了。

add_arguments()函数

add_arguments()函数可以配置命令传递的参数,比如执行python manage.py hello_world -t Django,输出输出Hello Django!可以修改成:

# 处理命令行参数,可选
def add_arguments(self, parser):
    parser.add_argument("-t", "--text", type=str, default='World', help="替换的字符串")

# 核心业务逻辑
def handle(self, *args, **options):
    text = options.get("text")
    self.stdout.write('Hello %s!' % text)

add_argument()函数

注意这个add_argument()和上面的少了一个s,是python的自带的方法,这里对parser.add_argument()函数做个简单介绍。

详细内容可参考官网文档:https://docs.python.org/3/library/argparse.html#the-add-argument-method

ArgumentParser.add_argument(name or flags…[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])

参数说明
name or flags执行的名称参数名,也就是上述的"-t", "--text"
default参数默认值,如果参数没传值则获取默认数据
type参数类型
choices参数可选项,如果有此配置则参数值必须在列表中
help参数说明

小结

到此本章就结束了,上述简单介绍了Django通过命令方式执行一些 操作的方法,具体详细还要参考官方的文档。
万变不离其宗,掌握了基础后面的具体使用就根据自己的情况而定就好了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我在那路边

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值