编写自定义 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重建完成。
数据重建完成,一把梭哈~~~
有了这个机制和命令,在开发的任何时候,删库,重建,验证,都便宜~