django management扩展 manage.py 创建自定义命令

django 使用中会常用到像 python manage.py runserver、python manage.py makemigrations、python manage.py migrate 这种命令。我们也可以自定义这种命令方便管理。

一、创建文件

  1. 在app内创建一个名字为:management文件夹,文件夹名字是固定的不可更改。
  2. 在management文件夹里面创建名为:commands的文件夹,同样是固定名称。
  3. 在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 命令可看到效果。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值