bifangback

编写自定义 django-admin 命令

2021-01-02  本文已影响0人  万州客

按官网文档来,一步一步即可搞定。我喜欢在项目开始前期,建立好数据表。但数据表建好之后,就是空的。使用django-admin的自定义命令,就可以快速的为数据表建立一大批模拟数据。

参考URL:
https://docs.djangoproject.com/zh-hans/3.1/howto/custom-management-commands/

一,在django app应用下,新建 management/commands 目录。

二,在此目录下,新建一个init空文件,表明此目录为一个python模块。

三,定义一个Command类并扩展自BaseCommand或其 子类。

我的目录是这样:

2021-01-02 22_55_21-bifangback – mockdb.py.png

我的命令继承类文件是这样:

from django.core.management.base import BaseCommand, CommandError
from cmdb.models import *
from datetime import datetime
from django.utils import timezone
import pytz
import random
from django.core.management.base import BaseCommand, CommandError
from django.contrib.auth import get_user_model

User = get_user_model()

username = 'admin'


# 自定义命令,用于建立测试数据,很多ORM语句会使用
class Command(BaseCommand):
    help = 'create test data for BiFang back server.'

    def add_arguments(self, parser):
        self.stdout.write(self.style.SUCCESS('没有额外参数,新建全部模拟测试数据,删除所有旧记录'))

    def handle(self, *args, **options):
        self.add_user()
        self.add_git()
        self.add_salt()
        self.add_env()
        self.stdout.write(self.style.SUCCESS('数据重建完成,一把梭哈~~~'))
        # raise CommandError('Ok!')

    # 新建一个用户
    def add_user(self):
        User.objects.all().delete()
        User.objects.create_user(username=username,
                                 password='password',
                                 is_staff=True,
                                 is_active=True,
                                 is_superuser=True)
        self.stdout.write('用户{}重建完成。'.format(username))

    # 新建一个Git仓库
    def add_git(self):
        GitTb.objects.all().delete()
        create_user = User.objects.get(username=username)
        GitTb.objects.create(name='MainGit',
                             description='主要git库',
                             create_user=create_user,
                             git_url='http://192.168.1.211:8090/',
                             git_user='git_user',
                             git_pwd='git_pwd')
        self.stdout.write('GitTb重建完成。')

    # 新建一个SaltApi
    def add_salt(self):
        SaltTb.objects.all().delete()
        create_user = User.objects.get(username=username)
        SaltTb.objects.create(name='MainSalt',
                              description='主要SaltApi',
                              create_user=create_user,
                              salt_url='http://192.168.1.211:8080/',
                              salt_user='git_user',
                              salt_pwd='git_pwd')
        self.stdout.write('SaltTb重建完成。')

    # 新建一个环境
    def add_env(self):
        Env.objects.all().delete()
        create_user = User.objects.get(username=username)
        salt = SaltTb.objects.order_by('?').first()
        env_list = ['dev', 'prd']
        for index, env in enumerate(env_list):
            Env.objects.create(name=env,
                               description=env,
                               create_user=create_user,
                               env_id=index,
                               salt=salt)
        self.stdout.write('Env重建完成。')

正常执行时,是这样:

(venv) D:\Code\bifang\bifangback>python manage.py  mockdb
没有额外参数,新建全部模拟测试数据,删除所有旧记录
用户admin重建完成。
GitTb重建完成。
SaltTb重建完成。
Env重建完成。
数据重建完成,一把梭哈~~~

有了这个机制和命令,在开发的任何时候,删库,重建,验证,都便宜~

上一篇下一篇

猜你喜欢

热点阅读