django中自定制命令
在任意一个已安装的应用下,创建如下包目录:
# 在每个 app 目录下,新建一个 management/commands 目录,Django 会给目录下的每个 Python 文件注册一个 manage.py 命令,这个命令的名字不以下划线开头。
polls/
__init__.py
models.py
management/
__init__.py
commands/
__init__.py
_private.py
closepoll.py
tests.py
views.py
在commads目录下面创建我们的命令文件,命令的名称就是命令文件的名称,命令文件内部的基本结构如下:
__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-8npython 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来添加参数.
handle是命令的处理函数,可以通过 options来取得从命令行输入的参数。