From addb57bb2a372709dce5435013a9b560205dea09 Mon Sep 17 00:00:00 2001 From: flj666 <2655425867@qq.com> Date: Sun, 23 Nov 2025 17:42:18 +0800 Subject: [PATCH] update fifth --- ...泛读、标注和维护报告文档.docx | Bin 0 -> 162 bytes src/DjangoBlog/Dockerfile | 4 +- src/DjangoBlog/accounts/views.py | 11 ++-- src/DjangoBlog/blog/models.py | 47 ++++++++++-------- src/DjangoBlog/blog/views.py | 20 +++++--- .../src/templates/blog/article_archives.html | 4 +- .../src/templates/blog/article_detail.html | 4 +- .../src/templates/blog/article_index.html | 4 +- .../src/templates/blog/error_page.html | 4 +- .../src/templates/blog/links_list.html | 4 +- .../src/templates/oauth/bindsuccess.html | 4 +- .../src/templates/search/search.html | 4 +- .../templates/blog/article_archives.html | 2 +- .../templates/blog/article_detail.html | 2 +- .../templates/blog/tags/sidebar.html | 35 +++++++------ 15 files changed, 80 insertions(+), 69 deletions(-) create mode 100644 doc/~$软件泛读、标注和维护报告文档.docx diff --git a/doc/~$软件泛读、标注和维护报告文档.docx b/doc/~$软件泛读、标注和维护报告文档.docx new file mode 100644 index 0000000000000000000000000000000000000000..21eef571e8c24f50ff825f3cc8e0e7a15b3eea42 GIT binary patch literal 162 zcmZSEe(}JmeSaB91I!GTz2fQ8Aq)(?QorgM7#6IPJDtbGz_6jUp9N$VjFy+SKrtAo m1Pox}Z)UPQ3yZnK$nfyYEUrohhUoj=3u8chC@5-5k^%r(xE-_r literal 0 HcmV?d00001 diff --git a/src/DjangoBlog/Dockerfile b/src/DjangoBlog/Dockerfile index 80b46ac..1227e11 100644 --- a/src/DjangoBlog/Dockerfile +++ b/src/DjangoBlog/Dockerfile @@ -4,12 +4,12 @@ WORKDIR /code/djangoblog/ RUN apt-get update && \ apt-get install default-libmysqlclient-dev gettext -y && \ rm -rf /var/lib/apt/lists/* -ADD requirements.txt requirements.txt +COPY requirements.txt requirements.txt RUN pip install --upgrade pip && \ pip install --no-cache-dir -r requirements.txt && \ pip install --no-cache-dir gunicorn[gevent] && \ pip cache purge -ADD . . +COPY . . RUN chmod +x /code/djangoblog/deploy/entrypoint.sh ENTRYPOINT ["/code/djangoblog/deploy/entrypoint.sh"] diff --git a/src/DjangoBlog/accounts/views.py b/src/DjangoBlog/accounts/views.py index 57afb09..5e2651d 100644 --- a/src/DjangoBlog/accounts/views.py +++ b/src/DjangoBlog/accounts/views.py @@ -124,8 +124,7 @@ class LoginView(FormView): #zxm 表单验证成功后的处理 def form_valid(self, form): - form = AuthenticationForm(data=self.request.POST, request=self.request) - + # 不再重新创建form,直接使用传入的form参数 if form.is_valid(): delete_sidebar_cache() #zxm 删除侧边栏缓存 logger.info(self.redirect_field_name) @@ -151,11 +150,11 @@ class LoginView(FormView): #xy 账户结果处理函数 def account_result(request): - type = request.GET.get('type') #zxm 获取类型参数 - id = request.GET.get('id') #zxm 获取用户ID + action_type = request.GET.get('type') #zxm 获取类型参数,避免与内置type冲突 + user_id = request.GET.get('id') #zxm 获取用户ID,避免与内置id冲突 - user = get_object_or_404(get_user_model(), id=id) #zxm 获取用户对象 - logger.info(type) + user = get_object_or_404(get_user_model(), id=user_id) #zxm 获取用户对象 + logger.info(action_type) if user.is_active: #zxm 如果用户已激活 return HttpResponseRedirect('/') #zxm 重定向到首页 if type and type in ['register', 'validation']: #zxm 处理注册或验证类型 diff --git a/src/DjangoBlog/blog/models.py b/src/DjangoBlog/blog/models.py index 11cd326..97c3b66 100644 --- a/src/DjangoBlog/blog/models.py +++ b/src/DjangoBlog/blog/models.py @@ -30,10 +30,17 @@ class LinkShowType(models.TextChoices): #fkc 所有模型的基类,包含通用字段,避免重复代码 +# 定义缓存时间常量,避免重复使用字面量 +CACHE_10_HOURS = 60 * 60 * 10 +# 字段名称常量 +CREATION_TIME_LABEL = 'creation time' +MODIFY_TIME_LABEL = 'modify time' +CACHE_100_MINUTES = 60 * 100 + class BaseModel(models.Model): id = models.AutoField(primary_key=True) #fkc 主键,自动递增 - creation_time = models.DateTimeField(_('creation time'), default=now) #fkc 创建时间 - last_modify_time = models.DateTimeField(_('modify time'), default=now) #fkc 最后修改时间 + creation_time = models.DateTimeField(_(CREATION_TIME_LABEL), default=now) #fkc 创建时间 + last_modify_time = models.DateTimeField(_(MODIFY_TIME_LABEL), default=now) #fkc 最后修改时间 #fkc 重写保存方法,自动处理slug字段(用于生成友好的URL) def save(self, *args, **kwargs): @@ -94,12 +101,12 @@ class Article(BaseModel): max_length=1, choices=STATUS_CHOICES, default='p') #cll 文章状态 - comment_status = models.CharField( + comment_status_field = models.CharField( _('comment status'), max_length=1, choices=COMMENT_STATUS, default='o') #cll 评论状态 - type = models.CharField(_('type'), max_length=1, choices=TYPE, default='a') #cll 内容类型 + article_type = models.CharField(_('type'), max_length=1, choices=TYPE, default='a') #cll 内容类型 views = models.PositiveIntegerField(_('views'), default=0) #cll 浏览次数 author = models.ForeignKey( settings.AUTH_USER_MODEL, @@ -134,13 +141,13 @@ class Article(BaseModel): #cll 获取文章的URL def get_absolute_url(self): - if self.type == 'a': + if self.article_type == 'a': return reverse('blog:detail', kwargs={'article_id': self.id, 'slug': self.slug}) - elif self.type == 'p': + elif self.article_type == 'p': return reverse('blog:page', kwargs={'article_id': self.id, 'slug': self.slug}) #cll 获取分类树,缓存10小时 - @cache_decorator(60 * 60 * 10) # 缓存10小时 + @cache_decorator(CACHE_10_HOURS) # 缓存10小时 def get_category_tree(self): category = self.category names = [category.name] @@ -170,12 +177,12 @@ class Article(BaseModel): return reverse('admin:%s_%s_change' % info, args=(self.id,)) #cll 获取下一篇文章,缓存100分钟 - @cache_decorator(expiration=60 * 100) # 缓存100分钟 + @cache_decorator(expiration=CACHE_100_MINUTES) # 缓存100分钟 def next_article(self): return Article.objects.filter(id__gt=self.id, status='p').order_by('id').first() #cll 获取上一篇文章,缓存100分钟 - @cache_decorator(expiration=60 * 100) # 缓存100分钟 + @cache_decorator(expiration=CACHE_100_MINUTES) # 缓存100分钟 def prev_article(self): return Article.objects.filter(id__lt=self.id, status='p').order_by('-id').first() @@ -215,7 +222,7 @@ class Category(BaseModel): return self.name #xy 获取分类树,缓存10小时 - @cache_decorator(60 * 60 * 10) # 缓存10小时 + @cache_decorator(CACHE_10_HOURS) # 缓存10小时 def get_category_tree(self): names = [self.name] category = self.parent_category @@ -225,7 +232,7 @@ class Category(BaseModel): return names #xy 获取子分类列表,缓存10小时 - @cache_decorator(60 * 60 * 10) # 缓存10小时 + @cache_decorator(CACHE_10_HOURS) # 缓存10小时 def get_sub_categorys(self): categories = [] all_categories = Category.objects.all() @@ -254,7 +261,7 @@ class Tag(BaseModel): return reverse('blog:tag_detail', kwargs={'tag_name': self.slug}) #zhj 获取标签下的文章数量,缓存10小时 - @cache_decorator(60 * 60 * 10) # 缓存10小时 + @cache_decorator(CACHE_10_HOURS) # 缓存10小时 def get_article_count(self): return Article.objects.filter(tags=self).count() @@ -276,8 +283,8 @@ class Links(models.Model): max_length=1, choices=LinkShowType.choices, default=LinkShowType.I) #flj 显示类型 - creation_time = models.DateTimeField(_('creation time'), default=now) #flj 创建时间 - last_mod_time = models.DateTimeField(_('modify time'), default=now) #flj 修改时间 + creation_time = models.DateTimeField(_(CREATION_TIME_LABEL), default=now) #flj 创建时间 + last_modify_time = models.DateTimeField(_(MODIFY_TIME_LABEL), default=now) #flj 修改时间,与基类保持一致 class Meta: ordering = ['sequence'] #flj 按序号排序 @@ -295,8 +302,8 @@ class SideBar(models.Model): content = models.TextField(_('content')) #zxm 侧边栏内容(支持HTML) sequence = models.IntegerField(_('order'), unique=True) #zxm 排序序号 is_enable = models.BooleanField(_('is enable'), default=True) #zxm 是否启用 - creation_time = models.DateTimeField(_('creation time'), default=now) #zxm 创建时间 - last_mod_time = models.DateTimeField(_('modify time'), default=now) #zxm 修改时间 + creation_time = models.DateTimeField(_(CREATION_TIME_LABEL), default=now) #zxm 创建时间 + last_mod_time = models.DateTimeField(_(MODIFY_TIME_LABEL), default=now) #zxm 修改时间 class Meta: ordering = ['sequence'] #zxm 按序号排序 @@ -338,19 +345,18 @@ class BlogSettings(models.Model): show_google_adsense = models.BooleanField(_('show adsense'), default=False) #fkc 是否显示广告 google_adsense_codes = models.TextField( - _('adsense code'), max_length=2000, null=True, blank=True, default='') #fkc 广告代码 + _('adsense code'), max_length=2000, blank=True, default='') #fkc 广告代码 open_site_comment = models.BooleanField(_('open site comment'), default=True) #fkc 是否开放评论 comment_need_review = models.BooleanField( '评论是否需要审核', default=False, null=False) #fkc 评论是否需要审核 - global_header = models.TextField("公共头部", null=True, blank=True, default='') #fkc 公共头部HTML - global_footer = models.TextField("公共尾部", null=True, blank=True, default='') #fkc 公共尾部HTML + global_header = models.TextField("公共头部", blank=True, default='') #fkc 公共头部HTML + global_footer = models.TextField("公共尾部", blank=True, default='') #fkc 公共尾部HTML beian_code = models.CharField( '备案号', max_length=2000, - null=True, blank=True, default='') #fkc ICP备案号 show_gongan_code = models.BooleanField( @@ -358,7 +364,6 @@ class BlogSettings(models.Model): gongan_beiancode = models.TextField( '公安备案号', max_length=2000, - null=True, blank=True, default='') #fkc 公安备案号 diff --git a/src/DjangoBlog/blog/views.py b/src/DjangoBlog/blog/views.py index eaa043c..af3826e 100644 --- a/src/DjangoBlog/blog/views.py +++ b/src/DjangoBlog/blog/views.py @@ -1,9 +1,13 @@ #flj 博客视图文件,处理博客相关的页面请求 +import json import logging import os import uuid from django.conf import settings + +# 模板常量定义 +ERROR_PAGE_TEMPLATE = 'blog/error_page.html' from django.core.paginator import Paginator # 用于分页 from django.http import HttpResponse, HttpResponseForbidden from django.shortcuts import get_object_or_404 @@ -89,7 +93,7 @@ class IndexView(ArticleListView): #flj 获取首页文章数据,过滤条件为类型为文章(a)且状态为已发布(p) def get_queryset_data(self): # 获取所有已发布的文章 - article_list = Article.objects.filter(type='a', status='p') + article_list = Article.objects.filter(article_type='a', status='p') return article_list #flj 生成首页的缓存键,包含页码信息 @@ -128,6 +132,7 @@ class CategoryDetailView(ArticleListView): #flj 获取分类下的文章数据,根据URL参数中的分类ID过滤 def get_queryset_data(self): + # 使用局部变量避免未使用参数警告 #flj 获取分类ID #flj 过滤该分类下的已发布文章 #flj 返回查询结果 @@ -159,6 +164,7 @@ class AuthorDetailView(ArticleListView): #flj 获取作者的文章数据,根据URL参数中的作者ID过滤 def get_queryset_data(self): + # 使用局部变量避免未使用参数警告 #flj 获取作者ID #flj 过滤该作者的已发布文章 return article_list @@ -179,6 +185,7 @@ class TagDetailView(ArticleListView): #flj 获取标签下的文章数据,根据URL参数中的标签ID过滤 def get_queryset_data(self): + # 使用局部变量避免未使用参数警告 #flj 获取标签ID #flj 过滤该标签下的已发布文章 return article_list @@ -260,22 +267,23 @@ def fileupload(request): #flj 处理页面未找到的情况 def page_not_found_view( request, - exception, - template_name='blog/error_page.html'): + template_name=ERROR_PAGE_TEMPLATE): ''' 404错误页面 ''' #flj 渲染错误页面 + context = get_blog_setting() return render(request, template_name, context, status=404) #flj 500错误页面视图 #flj 处理服务器内部错误的情况 -def server_error_view(request, template_name='blog/error_page.html'): +def server_error_view(request, template_name=ERROR_PAGE_TEMPLATE): ''' 500错误页面 ''' #flj 渲染错误页面 + context = get_blog_setting() return render(request, template_name, context, status=500) @@ -283,12 +291,12 @@ def server_error_view(request, template_name='blog/error_page.html'): #flj 处理权限拒绝的情况 def permission_denied_view( request, - exception, - template_name='blog/error_page.html'): + template_name=ERROR_PAGE_TEMPLATE): ''' 403错误页面 ''' #flj 渲染错误页面 + context = get_blog_setting() return render(request, template_name, context, status=403) diff --git a/src/DjangoBlog/src/templates/blog/article_archives.html b/src/DjangoBlog/src/templates/blog/article_archives.html index 959319e..13f6670 100644 --- a/src/DjangoBlog/src/templates/blog/article_archives.html +++ b/src/DjangoBlog/src/templates/blog/article_archives.html @@ -17,7 +17,7 @@ {% endblock %} {% block content %}