zoukankan      html  css  js  c++  java
  • Django command

    这一篇临时写的,作用是记录,还没有细化和整理,可能看起来比较乱,有时间了再整理优化

    今天要基于Django写一个脚本,command实现比较容易,而且还能用到Django本身的ORM挺方便的,所以就决定用command, 一下午下来,脚本写完了,感觉也遇到了不少的坑,所以这里总结一下。

    commands的创建

    1、在app内创建一个management的python目录
    2、在management目录里面创建commands的python文件夹
    3、在commands文件夹下创建任意py文件
    

    此时py文件名就是你的自定制命令,可以使用下面方式执行

    python manage.py 命令名
    

    command对于文件名没什么要求,但文件内部需要定义一个Command类并继承BaseCommand类或其子类

    这样最基本的命令就写好了

    调用直接用上面的python manage.py 命令名调用就好

    这都没啥讲的,我遇到的坑是加入参数,也就是add_argument() 的使用方法

    首先下面是这个方法的参数列表

    ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])
    
    • name or flags - 选项字符串的名字或者列表,例如 foo 或者 -f, --foo。
    • action - 命令行遇到参数时的动作,默认值是 store。
      • store_const,表示赋值为const;
      • append,将遇到的值存储成列表,也就是如果参数重复则会保存多个值;
      • append_const,将参数规范中定义的一个值保存到一个列表;
      • count,存储遇到的次数;此外,也可以继承 argparse.Action 自定义参数解析;
    • nargs - 应该读取的命令行参数个数,可以是具体的数字,或者是?号,当不指定值时对于 Positional argument 使用 default,对于 Optional argument 使用 const;或者是 * 号,表示 0 或多个参数;或者是 + 号表示 1 或多个参数。
    • const - action 和 nargs 所需要的常量值。
    • default - 不指定参数时的默认值。
    • type - 命令行参数应该被转换成的类型。
    • choices - 参数可允许的值的一个容器。
    • required - 可选参数是否可以省略 (仅针对可选参数)。
    • help - 参数的帮助信息,当指定为 argparse.SUPPRESS 时表示不显示该参数的帮助信息.
    • metavar - 在 usage 说明中的参数名称,对于必选参数默认就是参数名称,对于可选参数默认是全大写的参数名称.
    • dest - 解析后的参数名称,默认情况下,对于可选参数选取最长的名称,中划线转换为下划线.

    parser.add_argument(),里面的参数,如果有–,表示是可选参数,没有–的话,意味着是必选参数,在运行时必须输入,default是没有用的。

    parser.add_argument('--date',
                        nargs='?',
                        default='all',
                        type=str,
                        required=False,
                        help='Select data date args please input week or all '
    

    加--的同时,nargs的值也需要相应更改,否则也会报错,这点要注意下

    可选参数用法,以上面的设置为例

    python manage.py command111 --date=week
    

    不能直接跟week,需要加个--date

    整体命令格式
    class Command(BaseCommand):
    
        def add_arguments(self, parser):
    
            parser.add_argument(
                '-n',
                '--name',
                action='store',
                dest='name',
                default='close',
                help='name of author.',
            )
    
        def handle(self, *args, **options):
            try:
                if options['name']:
                    print('hello world, %s' % options['name'])
                self.stdout.write(self.style.SUCCESS('命令%s执行成功, 参数为%s' % (__file__, options['name'])))
            except Exception as e:
                self.stdout.write(self.style.ERROR('命令执行出错'))
    
    
    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 有任何问题请随时交流~ Email: araise1@163.com
  • 相关阅读:
    网络受限下,使用Nexus要解决的两个问题
    Nexus远程Maven仓库索引下载教程
    maven--私服的搭建(Nexus的使用)
    maven命令/依赖/聚合
    mybatis常用jdbcType数据类型
    Lombok 安装、入门
    jquery append 动态添加的元素事件on 不起作用的解决方案
    Maximum Sum on Even Positions
    哈密顿
    计算几何基础
  • 原文地址:https://www.cnblogs.com/seasen/p/14886468.html
Copyright © 2011-2022 走看看