django 使用中会常用到像 python manage.py runserver、python manage.py makemigrations、python manage.py migrate 这种命令。我们也可以自定义这种命令方便管理。
一、创建文件
- 在app内创建一个名字为:management文件夹,文件夹名字是固定的不可更改。
- 在management文件夹里面创建名为:commands的文件夹,同样是固定名称。
- 在commands文件夹下先创建一个__init__.py的空文件,再创建名为:demo.py文件(启动的时候就是根据该文件名进行启动的,注意:commands目录内都包含__init__.py文件)
二、编辑文件
打demo.py 文件,写入以下代码:
from django.core.management.base import CommandError, BaseCommand
from django.db import models
class Command(BaseCommand):
help = '每日凌晨对当天数据库进行更新' # command功能作用简介
def add_arguments(self, parser): # 用来接收可选参数的( 如果没有参数该方法可以不写 )
parser.add_argument('offset', type=int, help='天数转移量')
def handle(self, *args, **options): # 主处理程序
print('hello world')
这里面需要定义一个Command类(固定名称不可更改)并继承baseCommand类或其子类。
这样就可以用:python manage.py demo 123 来执行demo.py中的代码了。
三、写个小样
下面写一个从csv表格中批量导入文章到数据库中的小样。
import csv
from django.core.management.base import BaseCommand
from blog.models import Article
class Command(BaseCommand):
help = '从一个CSV文件的内容中读取文章内容批量导入到数据库中' # command功能作用简介
def add_arguments(self, parser): # 用来接收可选参数的( 如果没有参数该方法可以不写 )
parser.add_argument('--path', type=str, help='路径')
def handle(self, *args, **kwargs): # 主处理程序
path = kwargs['path']
with open(path, 'rt', encoding='gbk') as f: # 这根据情况指定gbk或utf-8格式防止乱码
reader = csv.reader(f, dialect='excel', delimiter=';') # 用; 做为分割符,如果是,可以不指定
for row in reader:
print(row[0]) # 打印第一列
print(row[1]) # 打印第二列
# 这里可以根据情况导入数据库中
article = Article.objects.create(
title=row[1],
body=row[2],
)
print(article)
执行命令 python manage.py demo --path ./文档1/file.csv 命令可看到效果。