yxy添加 create_testdata.py 注释

yxy_branch
严欣怡 4 months ago
parent 34b683c86a
commit 470712015a

@ -1,40 +1,76 @@
# 导入Django用户模型、密码加密、命令基类
from django.contrib.auth import get_user_model
from django.contrib.auth.hashers import make_password
from django.core.management.base import BaseCommand
# 导入博客应用的核心模型
from blog.models import Article, Tag, Category
class Command(BaseCommand):
"""
Django自定义管理命令创建测试数据
用于快速生成用户分类标签和文章等测试数据方便开发和测试
"""
# 命令的帮助信息执行python manage.py help create_testdata时显示
help = 'create test datas'
def handle(self, *args, **options):
"""
命令核心执行逻辑
当运行python manage.py create_testdata时调用生成测试数据
"""
# 1. 创建或获取测试用户
# get_or_create存在则获取不存在则创建避免重复生成
# make_password加密密码安全存储
user = get_user_model().objects.get_or_create(
email='test@test.com', username='测试用户', password=make_password('test!q@w#eTYU'))[0]
email='test@test.com', # 测试邮箱
username='测试用户', # 用户名
password=make_password('test!q@w#eTYU') # 加密后的密码
)[0] # [0]取返回元组中的用户对象
# 2. 创建分类(含层级关系)
# 创建父分类(无上级分类)
pcategory = Category.objects.get_or_create(
name='我是父类目', parent_category=None)[0]
name='我是父类目',
parent_category=None # 顶级分类
)[0]
# 创建子分类(关联父分类)
category = Category.objects.get_or_create(
name='子类目', parent_category=pcategory)[0]
name='子类目',
parent_category=pcategory # 关联到父分类
)[0]
category.save() # 保存子分类
category.save()
# 3. 创建基础标签(供所有测试文章共用)
basetag = Tag()
basetag.name = "标签"
basetag.name = "标签" # 标签名称
basetag.save()
# 4. 批量创建测试文章1-19共19篇
for i in range(1, 20):
# 创建或获取文章
article = Article.objects.get_or_create(
category=category,
title='nice title ' + str(i),
body='nice content ' + str(i),
author=user)[0]
category=category, # 关联到子分类
title=f'nice title {i}', # 文章标题(带序号)
body=f'nice content {i}', # 文章内容(带序号)
author=user # 关联到测试用户
)[0]
# 为每篇文章创建专属标签
tag = Tag()
tag.name = "标签" + str(i)
tag.name = f"标签{i}" # 标签名称(带序号)
tag.save()
# 给文章添加标签(专属标签 + 基础标签)
article.tags.add(tag)
article.tags.add(basetag)
article.save()
article.save() # 保存文章(更新标签关联)
# 5. 清除缓存(确保新生成的测试数据能立即生效)
from djangoblog.utils import cache
cache.clear()
self.stdout.write(self.style.SUCCESS('created test datas \n'))
# 输出成功信息到控制台
self.stdout.write(self.style.SUCCESS('created test datas \n'))
Loading…
Cancel
Save