美文网首页问题收纳
Django自定义命令

Django自定义命令

作者: 渔父歌 | 来源:发表于2019-10-16 20:18 被阅读0次

    在任意一个已安装的应用下,创建如下包目录

    app
    ├─management
    │  ├─commands
    │  │  ├─__pycache__
    │  │  ├─ __init__.py
    │  │  └─yourcommad.py
    │  ├─__pycache__
    │  └─ __init__.py
    ...
    

    在commads目录下面创建我们的命令文件,命令的名称就是命令文件的名称,命令文件内部的基本结构如下:

    #-*- coding: utf-8 -*
    __author__ = 'geebos'
    from django.core.management.base import BaseCommand, CommandError
    from app.models import UserInfo
    import os
    import csv
    
    
    class Command(BaseCommand):
        help = '导入数据,以逗号分隔的csv文件,编码为UTF-8\npython manage.py import_data 数据文件路径'
    
        def add_arguments(self, parser):
             parser.add_argument('path', type=str)
    
        def handle(self, *args, **options):
            path = options['path']
            if not os.path.isfile(path):
                raise CommandError('文件不存在')
    
            print('正在导入...')
            with open(path, 'r', newline='', encoding='utf-8_sig') as f:
                reader = csv.DictReader(f)
    
                for t in reader:
                    UserInfo.objects.create(**dict(t))
            print('导入完成')
    

    首先定义一个Commad类(注意这个类名不能改变,并且一个文件内只能有一个Commad类),这个类继承自 django.core.management.base.BaseCommand.

    help为命令的帮助文档,当输入错误命令时输出 help的内容

    add_arguments函数用来添加参数,如果没有参数可以不定义这个函数。在这个函数里通过调用 parse.add_argument来添加参数.
    详情参看:python-argparse.add_argumetns

    handle是命令的处理函数,可以通过 options来取得从命令行输入的参数。

    参考:
    Source code for django.core.management.base:https://docs.djangoproject.com/en/2.2/_modules/django/core/management/base/#BaseCommand.add_arguments
    The add_argument() method:https://docs.python.org/3.6/library/argparse.html#the-add-argument-method

    相关文章

      网友评论

        本文标题:Django自定义命令

        本文链接:https://www.haomeiwen.com/subject/izzumctx.html