Compare commits
3 Commits
| Author | SHA1 | Date |
|---|---|---|
|
|
58dd9c17ed | 1 month ago |
|
|
d045c563d2 | 2 months ago |
|
|
fd8fd44d0e | 2 months ago |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,4 +1,8 @@
|
||||
# 导入Django应用配置类
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
# 定义博客应用的配置类
|
||||
class BlogConfig(AppConfig):
|
||||
name = 'blog' # 应用名称
|
||||
# 指定应用的名称
|
||||
name = 'blog'
|
||||
@ -1,62 +1,60 @@
|
||||
from django.contrib.auth import get_user_model # Django 提供的获取用户模型的方法
|
||||
from django.contrib.auth.hashers import make_password # 用于密码加密
|
||||
# 导入获取用户模型函数
|
||||
from django.contrib.auth import get_user_model
|
||||
# 导入密码加密函数
|
||||
from django.contrib.auth.hashers import make_password
|
||||
# 导入Django管理命令基类
|
||||
from django.core.management.base import BaseCommand
|
||||
|
||||
# 引入文章、标签、分类模型
|
||||
# 导入博客模型
|
||||
from blog.models import Article, Tag, Category
|
||||
|
||||
|
||||
# 创建测试数据的管理命令类
|
||||
class Command(BaseCommand):
|
||||
help = '创建测试数据' # 用于生成一些假数据,便于前端展示和功能测试
|
||||
# 命令帮助信息
|
||||
help = 'create test datas'
|
||||
|
||||
# 命令处理主方法
|
||||
def handle(self, *args, **options):
|
||||
# 创建或获取一个测试用户
|
||||
# 获取或创建测试用户
|
||||
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]
|
||||
|
||||
# 创建或获取一个父级分类
|
||||
# 获取或创建父类目
|
||||
pcategory = Category.objects.get_or_create(
|
||||
name='我是父类目',
|
||||
parent_category=None # 表示没有父分类,即为顶级分类
|
||||
)[0]
|
||||
name='我是父类目', parent_category=None)[0]
|
||||
|
||||
# 创建或获取一个子分类,其父分类为上面创建的 pcategory
|
||||
# 获取或创建子类目
|
||||
category = Category.objects.get_or_create(
|
||||
name='子类目',
|
||||
parent_category=pcategory
|
||||
)[0]
|
||||
category.save() # 保存分类对象
|
||||
name='子类目', parent_category=pcategory)[0]
|
||||
|
||||
# 创建一个基础标签
|
||||
# 保存子类目
|
||||
category.save()
|
||||
# 创建基础标签
|
||||
basetag = Tag()
|
||||
basetag.name = "标签"
|
||||
basetag.save()
|
||||
|
||||
# 循环创建 1~19 号文章,每篇文章都绑定到上面创建的子分类
|
||||
# 循环创建20篇测试文章
|
||||
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]
|
||||
|
||||
# 为每篇文章创建一个独立标签,如 标签1、标签2 ...
|
||||
category=category,
|
||||
title='nice title ' + str(i),
|
||||
body='nice content ' + str(i),
|
||||
author=user)[0]
|
||||
# 创建新标签
|
||||
tag = Tag()
|
||||
tag.name = "标签" + str(i)
|
||||
tag.save()
|
||||
|
||||
# 将独立标签和基础标签都添加到文章的标签集合中
|
||||
# 为文章添加标签
|
||||
article.tags.add(tag)
|
||||
article.tags.add(basetag)
|
||||
article.save() # 保存文章与标签的关联关系
|
||||
# 保存文章
|
||||
article.save()
|
||||
|
||||
# 清空缓存,确保新生成的数据能及时被正确索引或展示
|
||||
# 导入缓存工具
|
||||
from djangoblog.utils import cache
|
||||
# 清理缓存
|
||||
cache.clear()
|
||||
|
||||
# 输出成功提示
|
||||
self.stdout.write(self.style.SUCCESS('已创建测试数据 \n'))
|
||||
# 输出成功信息
|
||||
self.stdout.write(self.style.SUCCESS('created test datas \n'))
|
||||
@ -1,197 +0,0 @@
|
||||
# Generated by Django 5.2.6 on 2025-11-16 17:01
|
||||
|
||||
import django.db.models.deletion
|
||||
import django.utils.timezone
|
||||
import mdeditor.fields
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('blog', '0006_alter_blogsettings_options'),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterModelOptions(
|
||||
name='article',
|
||||
options={'get_latest_by': 'id', 'ordering': ['-article_order', '-pub_time'], 'verbose_name': '文章', 'verbose_name_plural': '文章'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='blogsettings',
|
||||
options={'verbose_name': '网站配置', 'verbose_name_plural': '网站配置'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='category',
|
||||
options={'ordering': ['-index'], 'verbose_name': '分类', 'verbose_name_plural': '分类'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='links',
|
||||
options={'ordering': ['sequence'], 'verbose_name': '友情链接', 'verbose_name_plural': '友情链接'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='sidebar',
|
||||
options={'ordering': ['sequence'], 'verbose_name': '侧边栏', 'verbose_name_plural': '侧边栏'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='tag',
|
||||
options={'ordering': ['name'], 'verbose_name': '标签', 'verbose_name_plural': '标签'},
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='article',
|
||||
name='article_order',
|
||||
field=models.IntegerField(default=0, verbose_name='排序'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='article',
|
||||
name='body',
|
||||
field=mdeditor.fields.MDTextField(verbose_name='内容'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='article',
|
||||
name='comment_status',
|
||||
field=models.CharField(choices=[('o', '开放评论'), ('c', '关闭评论')], default='o', max_length=1, verbose_name='评论状态'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='article',
|
||||
name='creation_time',
|
||||
field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='创建时间'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='article',
|
||||
name='last_modify_time',
|
||||
field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='修改时间'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='article',
|
||||
name='show_toc',
|
||||
field=models.BooleanField(default=False, verbose_name='显示目录'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='article',
|
||||
name='status',
|
||||
field=models.CharField(choices=[('d', '草稿'), ('p', '发布')], default='p', max_length=1, verbose_name='状态'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='article',
|
||||
name='tags',
|
||||
field=models.ManyToManyField(blank=True, to='blog.tag', verbose_name='标签'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='blogsettings',
|
||||
name='article_comment_count',
|
||||
field=models.IntegerField(default=5, verbose_name='文章评论数量'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='blogsettings',
|
||||
name='google_adsense_codes',
|
||||
field=models.TextField(blank=True, default='', max_length=2000, null=True, verbose_name='Google广告代码'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='blogsettings',
|
||||
name='open_site_comment',
|
||||
field=models.BooleanField(default=True, verbose_name='开放站点评论'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='blogsettings',
|
||||
name='show_google_adsense',
|
||||
field=models.BooleanField(default=False, verbose_name='显示Google广告'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='blogsettings',
|
||||
name='sidebar_article_count',
|
||||
field=models.IntegerField(default=10, verbose_name='侧边栏文章数量'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='blogsettings',
|
||||
name='sidebar_comment_count',
|
||||
field=models.IntegerField(default=5, verbose_name='侧边栏评论数量'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='blogsettings',
|
||||
name='site_description',
|
||||
field=models.TextField(default='', max_length=1000, verbose_name='站点描述'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='blogsettings',
|
||||
name='site_keywords',
|
||||
field=models.TextField(default='', max_length=1000, verbose_name='站点关键词'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='blogsettings',
|
||||
name='site_name',
|
||||
field=models.CharField(default='', max_length=200, verbose_name='站点名称'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='blogsettings',
|
||||
name='site_seo_description',
|
||||
field=models.TextField(default='', max_length=1000, verbose_name='SEO描述'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='category',
|
||||
name='creation_time',
|
||||
field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='创建时间'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='category',
|
||||
name='index',
|
||||
field=models.IntegerField(default=0, verbose_name='排序'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='category',
|
||||
name='last_modify_time',
|
||||
field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='修改时间'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='category',
|
||||
name='name',
|
||||
field=models.CharField(max_length=30, unique=True, verbose_name='分类名称'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='links',
|
||||
name='creation_time',
|
||||
field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='创建时间'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='links',
|
||||
name='show_type',
|
||||
field=models.CharField(choices=[('i', '首页'), ('l', '列表页'), ('p', '文章页'), ('a', '全部'), ('s', '幻灯片')], default='i', max_length=1, verbose_name='显示位置'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='sidebar',
|
||||
name='creation_time',
|
||||
field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='创建时间'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='tag',
|
||||
name='creation_time',
|
||||
field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='创建时间'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='tag',
|
||||
name='last_modify_time',
|
||||
field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='修改时间'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='tag',
|
||||
name='name',
|
||||
field=models.CharField(max_length=30, unique=True, verbose_name='标签名称'),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='ArticleLike',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('created_time', models.DateTimeField(default=django.utils.timezone.now, verbose_name='点赞时间')),
|
||||
('article', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='article_likes', to='blog.article', verbose_name='文章')),
|
||||
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='用户')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '文章点赞',
|
||||
'verbose_name_plural': '文章点赞',
|
||||
'ordering': ['-created_time'],
|
||||
'unique_together': {('article', 'user')},
|
||||
},
|
||||
),
|
||||
]
|
||||
@ -1,18 +0,0 @@
|
||||
# Generated by Django 5.2.6 on 2025-11-16 17:08
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('blog', '0007_alter_article_options_alter_blogsettings_options_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='article',
|
||||
name='like_count',
|
||||
field=models.PositiveIntegerField(default=0, verbose_name='点赞数'),
|
||||
),
|
||||
]
|
||||
@ -1,32 +0,0 @@
|
||||
# Generated by Django 5.2.6 on 2025-11-16 18:43
|
||||
|
||||
import django.db.models.deletion
|
||||
import django.utils.timezone
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('blog', '0008_article_like_count'),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='ArticleFavorite',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('created_time', models.DateTimeField(default=django.utils.timezone.now, verbose_name='收藏时间')),
|
||||
('article', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='article_favorites', to='blog.article', verbose_name='文章')),
|
||||
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='用户')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '文章收藏',
|
||||
'verbose_name_plural': '文章收藏',
|
||||
'ordering': ['-created_time'],
|
||||
'unique_together': {('article', 'user')},
|
||||
},
|
||||
),
|
||||
]
|
||||
@ -1,18 +0,0 @@
|
||||
# Generated by Django 5.2.6 on 2025-11-16 19:04
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('blog', '0009_articlefavorite'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='article',
|
||||
name='favorite_count',
|
||||
field=models.PositiveIntegerField(default=0, verbose_name='收藏数'),
|
||||
),
|
||||
]
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,8 @@
|
||||
# 导入Django应用配置类
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
# 定义OAuth应用的配置类
|
||||
class OauthConfig(AppConfig):
|
||||
name = 'oauth'
|
||||
# 指定应用的名称
|
||||
name = 'oauth'
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue