部分业务场景在启动Django框架的时候需要在数据库中生成指定账号,可以使用post_migrate信号实现初始化数据库操作
python3 manage.py migrate
–调用migrate之后,django会发起post_migrate信号,数据库基础数据的初始化可以写在里面
具体操作:
- 在app目录的app.py中增加如下
from django.apps import AppConfig
from django.db.models.signals import post_migrate
from loguru import logger
from passlib.context import CryptContext
import uuid, datetime
def init_account(sender, **kwargs):
from accounts.models import Accounts
if Accounts.objects.count() == 0:
crypt_manager = CryptContext(schemes=["bcrypt"], deprecated="auto")
created_time = datetime.datetime.utcnow()
uid = str(uuid.uuid4())
hashed_password = crypt_manager.hash("123456")
exp_time = datetime.date(9999, 12, 31)
add_info = {"uid": uid, "created_time": created_time, "updated_time": created_time,
"name": "admin", "hashed_password": hashed_password, "character": 0, "call_times": -1,
"exp_time": exp_time}
Accounts.objects.create(**add_info)
logger.info("create admin account success!")
class AccountsConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'accounts'
def ready(self):
post_migrate.connect(init_account, sender=self)
- 再次执行
python3 manage.py migrate
后,会生成自定义的记录