parent
fd8fd44d0e
commit
d045c563d2
@ -1,5 +1,8 @@
|
||||
# 导入Django应用配置类
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
# 定义博客应用的配置类
|
||||
class BlogConfig(AppConfig):
|
||||
name = 'blog'
|
||||
# 指定应用的名称
|
||||
name = 'blog'
|
||||
@ -1,18 +1,29 @@
|
||||
# 导入Django管理命令基类
|
||||
from django.core.management.base import BaseCommand
|
||||
|
||||
# 导入Elasticsearch相关文档和管理器
|
||||
from blog.documents import ElapsedTimeDocument, ArticleDocumentManager, ElaspedTimeDocumentManager, \
|
||||
ELASTICSEARCH_ENABLED
|
||||
|
||||
|
||||
# TODO 参数化
|
||||
# 构建搜索索引的管理命令类
|
||||
class Command(BaseCommand):
|
||||
# 命令帮助信息
|
||||
help = 'build search index'
|
||||
|
||||
# 命令处理主方法
|
||||
def handle(self, *args, **options):
|
||||
# 检查Elasticsearch是否启用
|
||||
if ELASTICSEARCH_ENABLED:
|
||||
# 构建耗时文档索引
|
||||
ElaspedTimeDocumentManager.build_index()
|
||||
# 初始化耗时文档管理器
|
||||
manager = ElapsedTimeDocument()
|
||||
manager.init()
|
||||
# 创建文章文档管理器实例
|
||||
manager = ArticleDocumentManager()
|
||||
# 删除现有索引
|
||||
manager.delete_index()
|
||||
manager.rebuild()
|
||||
# 重新构建索引
|
||||
manager.rebuild()
|
||||
@ -1,13 +1,20 @@
|
||||
# 导入Django管理命令基类
|
||||
from django.core.management.base import BaseCommand
|
||||
|
||||
# 导入博客模型
|
||||
from blog.models import Tag, Category
|
||||
|
||||
|
||||
# TODO 参数化
|
||||
# 构建搜索词的管理命令类
|
||||
class Command(BaseCommand):
|
||||
# 命令帮助信息
|
||||
help = 'build search words'
|
||||
|
||||
# 命令处理主方法
|
||||
def handle(self, *args, **options):
|
||||
# 从所有标签和分类中获取名称,合并并去重创建集合
|
||||
datas = set([t.name for t in Tag.objects.all()] +
|
||||
[t.name for t in Category.objects.all()])
|
||||
print('\n'.join(datas))
|
||||
# 打印所有搜索词,每个词占一行
|
||||
print('\n'.join(datas))
|
||||
@ -1,11 +1,18 @@
|
||||
# 导入Django管理命令基类
|
||||
from django.core.management.base import BaseCommand
|
||||
|
||||
# 导入缓存工具
|
||||
from djangoblog.utils import cache
|
||||
|
||||
|
||||
# 清理缓存的管理命令类
|
||||
class Command(BaseCommand):
|
||||
# 命令帮助信息
|
||||
help = 'clear the whole cache'
|
||||
|
||||
# 命令处理主方法
|
||||
def handle(self, *args, **options):
|
||||
# 清理所有缓存
|
||||
cache.clear()
|
||||
self.stdout.write(self.style.SUCCESS('Cleared cache\n'))
|
||||
# 输出成功信息
|
||||
self.stdout.write(self.style.SUCCESS('Cleared cache\n'))
|
||||
@ -1,40 +1,60 @@
|
||||
# 导入获取用户模型函数
|
||||
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 = '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]
|
||||
|
||||
# 获取或创建父类目
|
||||
pcategory = Category.objects.get_or_create(
|
||||
name='我是父类目', parent_category=None)[0]
|
||||
|
||||
# 获取或创建子类目
|
||||
category = Category.objects.get_or_create(
|
||||
name='子类目', parent_category=pcategory)[0]
|
||||
|
||||
# 保存子类目
|
||||
category.save()
|
||||
# 创建基础标签
|
||||
basetag = Tag()
|
||||
basetag.name = "标签"
|
||||
basetag.save()
|
||||
# 循环创建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]
|
||||
# 创建新标签
|
||||
tag = Tag()
|
||||
tag.name = "标签" + str(i)
|
||||
tag.save()
|
||||
# 为文章添加标签
|
||||
article.tags.add(tag)
|
||||
article.tags.add(basetag)
|
||||
# 保存文章
|
||||
article.save()
|
||||
|
||||
# 导入缓存工具
|
||||
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'))
|
||||
@ -1,50 +1,77 @@
|
||||
# 导入Django管理命令基类
|
||||
from django.core.management.base import BaseCommand
|
||||
|
||||
# 导入蜘蛛通知工具和获取当前站点函数
|
||||
from djangoblog.spider_notify import SpiderNotify
|
||||
from djangoblog.utils import get_current_site
|
||||
# 导入博客模型
|
||||
from blog.models import Article, Tag, Category
|
||||
|
||||
# 获取当前站点域名
|
||||
site = get_current_site().domain
|
||||
|
||||
|
||||
# 通知百度URL的管理命令类
|
||||
class Command(BaseCommand):
|
||||
# 命令帮助信息
|
||||
help = 'notify baidu url'
|
||||
|
||||
# 添加命令行参数
|
||||
def add_arguments(self, parser):
|
||||
parser.add_argument(
|
||||
'data_type',
|
||||
type=str,
|
||||
'data_type', # 参数名称
|
||||
type=str, # 参数类型
|
||||
choices=[
|
||||
'all',
|
||||
'article',
|
||||
'tag',
|
||||
'category'],
|
||||
help='article : all article,tag : all tag,category: all category,all: All of these')
|
||||
'all', # 所有类型
|
||||
'article', # 仅文章
|
||||
'tag', # 仅标签
|
||||
'category'], # 仅分类
|
||||
help='article : all article,tag : all tag,category: all category,all: All of these') # 帮助信息
|
||||
|
||||
# 获取完整URL的方法
|
||||
def get_full_url(self, path):
|
||||
# 构建完整的HTTPS URL
|
||||
url = "https://{site}{path}".format(site=site, path=path)
|
||||
return url
|
||||
|
||||
# 命令处理主方法
|
||||
def handle(self, *args, **options):
|
||||
# 获取数据类型参数
|
||||
type = options['data_type']
|
||||
# 输出开始信息
|
||||
self.stdout.write('start get %s' % type)
|
||||
|
||||
# 初始化URL列表
|
||||
urls = []
|
||||
# 处理文章URL
|
||||
if type == 'article' or type == 'all':
|
||||
# 获取所有已发布的文章
|
||||
for article in Article.objects.filter(status='p'):
|
||||
# 添加文章的完整URL
|
||||
urls.append(article.get_full_url())
|
||||
# 处理标签URL
|
||||
if type == 'tag' or type == 'all':
|
||||
# 获取所有标签
|
||||
for tag in Tag.objects.all():
|
||||
# 获取标签的相对URL
|
||||
url = tag.get_absolute_url()
|
||||
# 添加标签的完整URL
|
||||
urls.append(self.get_full_url(url))
|
||||
# 处理分类URL
|
||||
if type == 'category' or type == 'all':
|
||||
# 获取所有分类
|
||||
for category in Category.objects.all():
|
||||
# 获取分类的相对URL
|
||||
url = category.get_absolute_url()
|
||||
# 添加分类的完整URL
|
||||
urls.append(self.get_full_url(url))
|
||||
|
||||
# 输出开始通知信息
|
||||
self.stdout.write(
|
||||
self.style.SUCCESS(
|
||||
'start notify %d urls' %
|
||||
len(urls)))
|
||||
# 调用百度蜘蛛通知
|
||||
SpiderNotify.baidu_notify(urls)
|
||||
self.stdout.write(self.style.SUCCESS('finish notify'))
|
||||
# 输出完成信息
|
||||
self.stdout.write(self.style.SUCCESS('finish notify'))
|
||||
@ -1,42 +1,68 @@
|
||||
# 导入日志模块
|
||||
import logging
|
||||
# 导入时间模块
|
||||
import time
|
||||
|
||||
# 导入获取客户端IP的工具
|
||||
from ipware import get_client_ip
|
||||
# 导入用户代理解析工具
|
||||
from user_agents import parse
|
||||
|
||||
# 导入Elasticsearch相关配置和管理器
|
||||
from blog.documents import ELASTICSEARCH_ENABLED, ElaspedTimeDocumentManager
|
||||
|
||||
# 获取日志器
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
# 在线中间件类,用于记录页面渲染时间和用户访问信息
|
||||
class OnlineMiddleware(object):
|
||||
# 初始化方法
|
||||
def __init__(self, get_response=None):
|
||||
# 保存get_response函数
|
||||
self.get_response = get_response
|
||||
# 调用父类初始化
|
||||
super().__init__()
|
||||
|
||||
# 调用方法,处理请求和响应
|
||||
def __call__(self, request):
|
||||
''' page render time '''
|
||||
''' 页面渲染时间统计 '''
|
||||
# 记录开始时间
|
||||
start_time = time.time()
|
||||
# 调用后续中间件和视图,获取响应
|
||||
response = self.get_response(request)
|
||||
# 获取用户代理字符串
|
||||
http_user_agent = request.META.get('HTTP_USER_AGENT', '')
|
||||
# 获取客户端IP地址
|
||||
ip, _ = get_client_ip(request)
|
||||
# 解析用户代理信息
|
||||
user_agent = parse(http_user_agent)
|
||||
# 检查响应是否为流式响应
|
||||
if not response.streaming:
|
||||
try:
|
||||
# 计算渲染耗时
|
||||
cast_time = time.time() - start_time
|
||||
# 如果启用了Elasticsearch
|
||||
if ELASTICSEARCH_ENABLED:
|
||||
# 将耗时转换为毫秒并保留两位小数
|
||||
time_taken = round((cast_time) * 1000, 2)
|
||||
# 获取请求的URL路径
|
||||
url = request.path
|
||||
# 导入时区工具
|
||||
from django.utils import timezone
|
||||
# 创建耗时文档记录
|
||||
ElaspedTimeDocumentManager.create(
|
||||
url=url,
|
||||
time_taken=time_taken,
|
||||
log_datetime=timezone.now(),
|
||||
useragent=user_agent,
|
||||
ip=ip)
|
||||
log_datetime=timezone.now(), # 当前时间
|
||||
useragent=user_agent, # 用户代理信息
|
||||
ip=ip) # IP地址
|
||||
# 在响应内容中替换加载时间占位符
|
||||
response.content = response.content.replace(
|
||||
b'<!!LOAD_TIMES!!>', str.encode(str(cast_time)[:5]))
|
||||
except Exception as e:
|
||||
# 记录错误日志
|
||||
logger.error("Error OnlineMiddleware: %s" % e)
|
||||
|
||||
return response
|
||||
# 返回响应
|
||||
return response
|
||||
@ -1,23 +1,27 @@
|
||||
# Generated by Django 4.1.7 on 2023-03-29 06:08
|
||||
# 由Django 4.1.7于2023-03-29 06:08自动生成
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
# 迁移依赖关系
|
||||
dependencies = [
|
||||
# 依赖blog应用的0001_initial迁移文件
|
||||
('blog', '0001_initial'),
|
||||
]
|
||||
|
||||
# 迁移操作列表
|
||||
operations = [
|
||||
# 添加全局尾部字段到BlogSettings模型
|
||||
migrations.AddField(
|
||||
model_name='blogsettings',
|
||||
name='global_footer',
|
||||
field=models.TextField(blank=True, default='', null=True, verbose_name='公共尾部'),
|
||||
),
|
||||
# 添加全局头部字段到BlogSettings模型
|
||||
migrations.AddField(
|
||||
model_name='blogsettings',
|
||||
name='global_header',
|
||||
field=models.TextField(blank=True, default='', null=True, verbose_name='公共头部'),
|
||||
),
|
||||
]
|
||||
]
|
||||
@ -1,17 +1,21 @@
|
||||
# Generated by Django 4.2.1 on 2023-05-09 07:45
|
||||
# 由Django 4.2.1于2023-05-09 07:45自动生成
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
# 迁移依赖关系
|
||||
dependencies = [
|
||||
# 依赖blog应用的0002_blogsettings_global_footer_and_more迁移文件
|
||||
('blog', '0002_blogsettings_global_footer_and_more'),
|
||||
]
|
||||
|
||||
# 迁移操作列表
|
||||
operations = [
|
||||
# 添加评论审核字段到BlogSettings模型
|
||||
migrations.AddField(
|
||||
model_name='blogsettings',
|
||||
name='comment_need_review',
|
||||
field=models.BooleanField(default=False, verbose_name='评论是否需要审核'),
|
||||
),
|
||||
]
|
||||
]
|
||||
@ -1,300 +0,0 @@
|
||||
# Generated by Django 4.2.5 on 2023-09-06 13:13
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
import django.utils.timezone
|
||||
import mdeditor.fields
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('blog', '0004_rename_analyticscode_blogsettings_analytics_code_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterModelOptions(
|
||||
name='article',
|
||||
options={'get_latest_by': 'id', 'ordering': ['-article_order', '-pub_time'], 'verbose_name': 'article', 'verbose_name_plural': 'article'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='category',
|
||||
options={'ordering': ['-index'], 'verbose_name': 'category', 'verbose_name_plural': 'category'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='links',
|
||||
options={'ordering': ['sequence'], 'verbose_name': 'link', 'verbose_name_plural': 'link'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='sidebar',
|
||||
options={'ordering': ['sequence'], 'verbose_name': 'sidebar', 'verbose_name_plural': 'sidebar'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='tag',
|
||||
options={'ordering': ['name'], 'verbose_name': 'tag', 'verbose_name_plural': 'tag'},
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='article',
|
||||
name='created_time',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='article',
|
||||
name='last_mod_time',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='category',
|
||||
name='created_time',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='category',
|
||||
name='last_mod_time',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='links',
|
||||
name='created_time',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='sidebar',
|
||||
name='created_time',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='tag',
|
||||
name='created_time',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='tag',
|
||||
name='last_mod_time',
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='article',
|
||||
name='creation_time',
|
||||
field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='creation time'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='article',
|
||||
name='last_modify_time',
|
||||
field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='modify time'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='category',
|
||||
name='creation_time',
|
||||
field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='creation time'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='category',
|
||||
name='last_modify_time',
|
||||
field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='modify time'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='links',
|
||||
name='creation_time',
|
||||
field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='creation time'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='sidebar',
|
||||
name='creation_time',
|
||||
field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='creation time'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='tag',
|
||||
name='creation_time',
|
||||
field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='creation time'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='tag',
|
||||
name='last_modify_time',
|
||||
field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='modify time'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='article',
|
||||
name='article_order',
|
||||
field=models.IntegerField(default=0, verbose_name='order'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='article',
|
||||
name='author',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='author'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='article',
|
||||
name='body',
|
||||
field=mdeditor.fields.MDTextField(verbose_name='body'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='article',
|
||||
name='category',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='blog.category', verbose_name='category'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='article',
|
||||
name='comment_status',
|
||||
field=models.CharField(choices=[('o', 'Open'), ('c', 'Close')], default='o', max_length=1, verbose_name='comment status'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='article',
|
||||
name='pub_time',
|
||||
field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='publish time'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='article',
|
||||
name='show_toc',
|
||||
field=models.BooleanField(default=False, verbose_name='show toc'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='article',
|
||||
name='status',
|
||||
field=models.CharField(choices=[('d', 'Draft'), ('p', 'Published')], default='p', max_length=1, verbose_name='status'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='article',
|
||||
name='tags',
|
||||
field=models.ManyToManyField(blank=True, to='blog.tag', verbose_name='tag'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='article',
|
||||
name='title',
|
||||
field=models.CharField(max_length=200, unique=True, verbose_name='title'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='article',
|
||||
name='type',
|
||||
field=models.CharField(choices=[('a', 'Article'), ('p', 'Page')], default='a', max_length=1, verbose_name='type'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='article',
|
||||
name='views',
|
||||
field=models.PositiveIntegerField(default=0, verbose_name='views'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='blogsettings',
|
||||
name='article_comment_count',
|
||||
field=models.IntegerField(default=5, verbose_name='article comment count'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='blogsettings',
|
||||
name='article_sub_length',
|
||||
field=models.IntegerField(default=300, verbose_name='article sub length'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='blogsettings',
|
||||
name='google_adsense_codes',
|
||||
field=models.TextField(blank=True, default='', max_length=2000, null=True, verbose_name='adsense code'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='blogsettings',
|
||||
name='open_site_comment',
|
||||
field=models.BooleanField(default=True, verbose_name='open site comment'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='blogsettings',
|
||||
name='show_google_adsense',
|
||||
field=models.BooleanField(default=False, verbose_name='show adsense'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='blogsettings',
|
||||
name='sidebar_article_count',
|
||||
field=models.IntegerField(default=10, verbose_name='sidebar article count'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='blogsettings',
|
||||
name='sidebar_comment_count',
|
||||
field=models.IntegerField(default=5, verbose_name='sidebar comment count'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='blogsettings',
|
||||
name='site_description',
|
||||
field=models.TextField(default='', max_length=1000, verbose_name='site description'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='blogsettings',
|
||||
name='site_keywords',
|
||||
field=models.TextField(default='', max_length=1000, verbose_name='site keywords'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='blogsettings',
|
||||
name='site_name',
|
||||
field=models.CharField(default='', max_length=200, verbose_name='site name'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='blogsettings',
|
||||
name='site_seo_description',
|
||||
field=models.TextField(default='', max_length=1000, verbose_name='site seo description'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='category',
|
||||
name='index',
|
||||
field=models.IntegerField(default=0, verbose_name='index'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='category',
|
||||
name='name',
|
||||
field=models.CharField(max_length=30, unique=True, verbose_name='category name'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='category',
|
||||
name='parent_category',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='blog.category', verbose_name='parent category'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='links',
|
||||
name='is_enable',
|
||||
field=models.BooleanField(default=True, verbose_name='is show'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='links',
|
||||
name='last_mod_time',
|
||||
field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='modify time'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='links',
|
||||
name='link',
|
||||
field=models.URLField(verbose_name='link'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='links',
|
||||
name='name',
|
||||
field=models.CharField(max_length=30, unique=True, verbose_name='link name'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='links',
|
||||
name='sequence',
|
||||
field=models.IntegerField(unique=True, verbose_name='order'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='links',
|
||||
name='show_type',
|
||||
field=models.CharField(choices=[('i', 'index'), ('l', 'list'), ('p', 'post'), ('a', 'all'), ('s', 'slide')], default='i', max_length=1, verbose_name='show type'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='sidebar',
|
||||
name='content',
|
||||
field=models.TextField(verbose_name='content'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='sidebar',
|
||||
name='is_enable',
|
||||
field=models.BooleanField(default=True, verbose_name='is enable'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='sidebar',
|
||||
name='last_mod_time',
|
||||
field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='modify time'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='sidebar',
|
||||
name='name',
|
||||
field=models.CharField(max_length=100, verbose_name='title'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='sidebar',
|
||||
name='sequence',
|
||||
field=models.IntegerField(unique=True, verbose_name='order'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='tag',
|
||||
name='name',
|
||||
field=models.CharField(max_length=30, unique=True, verbose_name='tag name'),
|
||||
),
|
||||
]
|
||||
@ -1,17 +1,20 @@
|
||||
# Generated by Django 4.2.7 on 2024-01-26 02:41
|
||||
# 由Django 4.2.7于2024-01-26 02:41自动生成
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
# 迁移依赖关系
|
||||
dependencies = [
|
||||
# 依赖blog应用的0005迁移文件
|
||||
('blog', '0005_alter_article_options_alter_category_options_and_more'),
|
||||
]
|
||||
|
||||
# 迁移操作列表
|
||||
operations = [
|
||||
# 修改BlogSettings模型的元选项
|
||||
migrations.AlterModelOptions(
|
||||
name='blogsettings',
|
||||
options={'verbose_name': 'Website configuration', 'verbose_name_plural': 'Website configuration'},
|
||||
),
|
||||
]
|
||||
]
|
||||
@ -1,5 +1,8 @@
|
||||
# 导入Django应用配置类
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
# 定义评论应用的配置类
|
||||
class CommentsConfig(AppConfig):
|
||||
name = 'comments'
|
||||
# 指定应用的名称
|
||||
name = 'comments'
|
||||
@ -1,18 +1,21 @@
|
||||
# Generated by Django 4.1.7 on 2023-04-24 13:48
|
||||
# 由Django 4.1.7于2023-04-24 13:48自动生成
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
# 迁移依赖关系
|
||||
dependencies = [
|
||||
# 依赖comments应用的0001_initial迁移文件
|
||||
('comments', '0001_initial'),
|
||||
]
|
||||
|
||||
# 迁移操作列表
|
||||
operations = [
|
||||
# 修改Comment模型的is_enable字段的默认值
|
||||
migrations.AlterField(
|
||||
model_name='comment',
|
||||
name='is_enable',
|
||||
field=models.BooleanField(default=False, verbose_name='是否显示'),
|
||||
),
|
||||
]
|
||||
]
|
||||
Loading…
Reference in new issue