update fifth

develop
flj666 3 months ago
parent f5a0b9c349
commit addb57bb2a

@ -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"]

@ -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 处理注册或验证类型

@ -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 公安备案号

@ -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)

@ -17,7 +17,7 @@
{% endblock %}
{% block content %}
<div id="primary" class="site-content">
<div id="content" role="main">
<main id="content">
<header class="archive-header">
@ -47,7 +47,7 @@
{% endfor %}
</ul>
</div>
</div><!-- #content -->
</main><!-- #content -->
</div><!-- #primary -->
{% endblock %}

@ -5,7 +5,7 @@
{% endblock %}
{% block content %}
<div id="primary" class="site-content">
<div id="content" role="main">
<main id="content">
{% load_article_detail article False user %}
{% if article.type == 'a' %}
@ -24,7 +24,7 @@
</nav><!-- .nav-single -->
{% endif %}
</div><!-- #content -->
</main><!-- #content -->
{% if article.comment_status == "o" and OPEN_SITE_COMMENT %}

@ -18,7 +18,7 @@
{% endblock %}
{% block content %}
<div id="primary" class="site-content">
<div id="content" role="main">
<main id="content">
{% if page_type and tag_name %}
<header class="archive-header">
@ -33,7 +33,7 @@
{% load_pagination_info page_obj page_type tag_name %}
{% endif %}
</div><!-- #content -->
</main><!-- #content -->
</div><!-- #primary -->
{% endblock %}

@ -26,13 +26,13 @@
{% endblock %}
{% block content %}
<div id="primary" class="site-content">
<div id="content" role="main">
<main id="content">
<header class="archive-header">
<h1 class="archive-title">{{ message }}</h1>
</header><!-- .archive-header -->
</div><!-- #content -->
</main><!-- #content -->
</div><!-- #primary -->
{% endblock %}

@ -16,7 +16,7 @@
{% endblock %}
{% block content %}
<div id="primary" class="site-content">
<div id="content" role="main">
<main id="content">
<header class="archive-header">
@ -31,7 +31,7 @@
</li>
{% endfor %} </ul>
</div>
</div><!-- #content -->
</main><!-- #content -->
</div><!-- #primary -->
{% endblock %}

@ -4,7 +4,7 @@
{% endblock %}
{% block content %}
<div id="primary" class="site-content">
<div id="content" role="main">
<main id="content">
<header class="archive-header">
@ -17,6 +17,6 @@
|
<a href="/">回到首页</a>
</header><!-- .archive-header -->
</div>
</main><!-- #content -->
</div>
{% endblock %}

@ -12,7 +12,7 @@
{% endblock %}
{% block content %}
<div id="primary" class="site-content">
<div id="content" role="main">
<main id="content">
{% if query %}
<header class="archive-header">
{% if suggestion %}
@ -54,7 +54,7 @@
<h1 class="archive-title">哎呀,关键字:<span>{{ query }}</span>没有找到结果,要不换个词再试试?</h1>
</header><!-- .archive-header -->
{% endif %}
</div><!-- #content -->
</main><!-- #content -->
</div><!-- #primary -->
{% endblock %}

@ -17,7 +17,7 @@
{% endblock %}
{% block content %}
<div id="primary" class="site-content">
<div id="content" role="main">
<main id="content">
<header class="archive-header">

@ -5,7 +5,7 @@
{% endblock %}
{% block content %}
<div id="primary" class="site-content">
<div id="content" role="main">
<main id="content">
{% load_article_detail article False user %}
{% if article.type == 'a' %}

@ -1,7 +1,7 @@
{% load blog_tags %}
{% load i18n %}
<div id="secondary" class="widget-area" role="complementary">
<aside id="search-2" class="widget widget_search">
<aside id="secondary" class="widget-area" aria-label="侧边栏">
<aside id="search-2" class="widget widget_search" aria-label="搜索功能">
<form role="search" method="get" id="searchform" class="searchform" action="/search">
<div>
<label class="screen-reader-text" for="s">{% trans 'search' %}</label>
@ -13,7 +13,7 @@
{% if extra_sidebars %}
{% for sidebar in extra_sidebars %}
<aside class="widget_text widget widget_custom_html"><p class="widget-title">
<aside class="widget_text widget widget_custom_html" aria-label="自定义侧边栏"><p class="widget-title">
{{ sidebar.name }}</p>
<div class="textwidget custom-html-widget">
{{ sidebar.content|custom_markdown|safe }}
@ -23,7 +23,7 @@
{% endif %}
{% if most_read_articles %}
<aside id="views-4" class="widget widget_views"><p class="widget-title">Views</p>
<aside id="views-4" class="widget widget_views" aria-label="热门阅读"><p class="widget-title">Views</p>
<ul>
{% for a in most_read_articles %}
<li>
@ -37,7 +37,7 @@
</aside>
{% endif %}
{% if sidebar_categorys %}
<aside id="su_siloed_terms-2" class="widget widget_su_siloed_terms"><p class="widget-title">{% trans 'category' %}</p>
<aside id="su_siloed_terms-2" class="widget widget_su_siloed_terms" aria-label="文章分类"><p class="widget-title">{% trans 'category' %}</p>
<ul>
{% for c in sidebar_categorys %}
<li class="cat-item cat-item-184"><a href={{ c.get_absolute_url }}>{{ c.name }}</a>
@ -47,7 +47,7 @@
</aside>
{% endif %}
{% if sidebar_comments and open_site_comment %}
<aside id="ds-recent-comments-4" class="widget ds-widget-recent-comments"><p class="widget-title">{% trans 'recent comments' %}</p>
<aside id="ds-recent-comments-4" class="widget ds-widget-recent-comments" aria-label="最新评论"><p class="widget-title">{% trans 'recent comments' %}</p>
<ul id="recentcomments">
{% for c in sidebar_comments %}
@ -62,7 +62,7 @@
</aside>
{% endif %}
{% if recent_articles %}
<aside id="recent-posts-2" class="widget widget_recent_entries"><p class="widget-title">{% trans 'recent articles' %}</p>
<aside id="recent-posts-2" class="widget widget_recent_entries" aria-label="最新文章"><p class="widget-title">{% trans 'recent articles' %}</p>
<ul>
{% for a in recent_articles %}
@ -74,7 +74,7 @@
</aside>
{% endif %}
{% if sidabar_links %}
<aside id="linkcat-0" class="widget widget_links"><p class="widget-title">{% trans 'bookmark' %}</p>
<aside id="linkcat-0" class="widget widget_links" aria-label="书签链接"><p class="widget-title">{% trans 'bookmark' %}</p>
<ul class='xoxo blogroll'>
{% for l in sidabar_links %}
<li>
@ -86,25 +86,24 @@
</aside>
{% endif %}
{% if show_google_adsense %}
<aside id="text-2" class="widget widget_text"><p class="widget-title">Google AdSense</p>
<aside id="text-2" class="widget widget_text" aria-label="广告"><p class="widget-title">Google AdSense</p>
<div class="textwidget">
{{ google_adsense_codes|safe }}
</div>
</aside>
{% endif %}
{% if sidebar_tags %}
<aside id="tag_cloud-2" class="widget widget_tag_cloud"><p class="widget-title">{% trans 'Tag Cloud' %}</p>
<aside id="tag_cloud-2" class="widget widget_tag_cloud" aria-label="标签云"><p class="widget-title">{% trans 'Tag Cloud' %}</p>
<div class="tagcloud">
{% for tag,count,size in sidebar_tags %}
<a href="{{ tag.get_absolute_url }}"
class="tag-link-{{ tag.id }} tag-link-position-{{ tag.id }}"
style="font-size: {{ size }}pt;" title="{{ count }}个话题"> {{ tag.name }}
</a>
{% for tag, count, size in sidebar_tags %}
<a href="{{ tag.get_absolute_url }}" class="tag-link-{{ tag.id }} tag-link-position-{{ tag.id }}"
style="font-size: '{{ size }}pt';"
title="{{ count }}个话题">{{ tag.name }}</a>
{% endfor %}
</div>
</aside>
{% endif %}
<aside id="text-2" class="widget widget_text"><p class="widget-title">{% trans 'Welcome to star or fork the source code of this site' %}</p>
<aside id="text-3" class="widget widget_text" aria-label="源码链接"><p class="widget-title">{% trans 'Welcome to star or fork the source code of this site' %}</p>
<div class="textwidget">
<p><a href="https://github.com/liangliangyy/DjangoBlog" rel="nofollow"><img
@ -115,7 +114,7 @@
</div>
</aside>
<aside id="meta-3" class="widget widget_meta"><p class="widget-title">{% trans 'Function' %}</p>
<aside id="meta-3" class="widget widget_meta" aria-label="功能链接"><p class="widget-title">{% trans 'Function' %}</p>
<ul>
<li><a href="/admin/" rel="nofollow">{% trans 'management site' %}</a></li>
{% if user.is_authenticated %}
@ -133,4 +132,4 @@
</aside>
<div id="rocket" class="show" title="{% trans 'Click me to return to the top' %}"></div>
</div><!-- #secondary -->
</aside><!-- #secondary -->

Loading…
Cancel
Save