diff --git a/src/DjangoBlog-master/blog/views.py b/src/DjangoBlog-master/blog/views.py index d5dc7ec..29041e3 100644 --- a/src/DjangoBlog-master/blog/views.py +++ b/src/DjangoBlog-master/blog/views.py @@ -21,359 +21,359 @@ from djangoblog.plugin_manage import hooks from djangoblog.plugin_manage.hook_constants import ARTICLE_CONTENT_HOOK_NAME from djangoblog.utils import cache, get_blog_setting, get_sha256 -logger = logging.getLogger(__name__) +logger = logging.getLogger(__name__) #ZNY 获取当前模块的日志记录器 -class ArticleListView(ListView): +class ArticleListView(ListView): #ZNY 文章列表视图基类,继承Django通用列表视图 # template_name属性用于指定使用哪个模板进行渲染 - template_name = 'blog/article_index.html' + template_name = 'blog/article_index.html' #ZNY 指定使用的模板文件 # context_object_name属性用于给上下文变量取名(在模板中使用该名字) - context_object_name = 'article_list' + context_object_name = 'article_list' #ZNY 模板中使用的上下文变量名 # 页面类型,分类目录或标签列表等 - page_type = '' - paginate_by = settings.PAGINATE_BY - page_kwarg = 'page' - link_type = LinkShowType.L + page_type = '' #ZNY 页面类型标识 + paginate_by = settings.PAGINATE_BY #ZNY 每页显示的文章数量 + page_kwarg = 'page' #ZNY 分页参数名称 + link_type = LinkShowType.L #ZNY 链接显示类型,默认为列表页 - def get_view_cache_key(self): - return self.request.get['pages'] + def get_view_cache_key(self): #ZNY 获取视图缓存键方法 + return self.request.get['pages'] #ZNY 从请求中获取页面参数作为缓存键 @property - def page_number(self): - page_kwarg = self.page_kwarg - page = self.kwargs.get( + def page_number(self): #ZNY 页码属性,计算当前页码 + page_kwarg = self.page_kwarg #ZNY 获取分页参数名 + page = self.kwargs.get( #ZNY 从URL参数、GET参数或默认值获取页码 page_kwarg) or self.request.GET.get(page_kwarg) or 1 - return page + return page #ZNY 返回当前页码 - def get_queryset_cache_key(self): + def get_queryset_cache_key(self): #ZNY 获取查询集缓存键方法 """ 子类重写.获得queryset的缓存key """ - raise NotImplementedError() + raise NotImplementedError() #ZNY 要求子类必须实现此方法 - def get_queryset_data(self): + def get_queryset_data(self): #ZNY 获取查询集数据方法 """ 子类重写.获取queryset的数据 """ - raise NotImplementedError() + raise NotImplementedError() #ZNY 要求子类必须实现此方法 - def get_queryset_from_cache(self, cache_key): + def get_queryset_from_cache(self, cache_key): #ZNY 从缓存获取查询集方法 ''' 缓存页面数据 :param cache_key: 缓存key :return: ''' - value = cache.get(cache_key) - if value: - logger.info('get view cache.key:{key}'.format(key=cache_key)) - return value - else: - article_list = self.get_queryset_data() - cache.set(cache_key, article_list) - logger.info('set view cache.key:{key}'.format(key=cache_key)) - return article_list - - def get_queryset(self): + value = cache.get(cache_key) #ZNY 尝试从缓存获取数据 + if value: #ZNY 如果缓存存在 + logger.info('get view cache.key:{key}'.format(key=cache_key)) #ZNY 记录缓存命中日志 + return value #ZNY 返回缓存数据 + else: #ZNY 如果缓存不存在 + article_list = self.get_queryset_data() #ZNY 从数据库获取数据 + cache.set(cache_key, article_list) #ZNY 将数据存入缓存 + logger.info('set view cache.key:{key}'.format(key=cache_key)) #ZNY 记录缓存设置日志 + return article_list #ZNY 返回数据 + + def get_queryset(self): #ZNY 重写获取查询集方法 ''' 重写默认,从缓存获取数据 :return: ''' - key = self.get_queryset_cache_key() - value = self.get_queryset_from_cache(key) - return value + key = self.get_queryset_cache_key() #ZNY 获取缓存键 + value = self.get_queryset_from_cache(key) #ZNY 从缓存获取数据 + return value #ZNY 返回查询集 - def get_context_data(self, **kwargs): - kwargs['linktype'] = self.link_type - return super(ArticleListView, self).get_context_data(**kwargs) + def get_context_data(self, **kwargs): #ZNY 获取上下文数据方法 + kwargs['linktype'] = self.link_type #ZNY 添加链接类型到上下文 + return super(ArticleListView, self).get_context_data(**kwargs) #ZNY 调用父类方法 -class IndexView(ArticleListView): +class IndexView(ArticleListView): #ZNY 首页视图,继承文章列表视图 ''' 首页 ''' # 友情链接类型 - link_type = LinkShowType.I + link_type = LinkShowType.I #ZNY 设置链接显示类型为首页 - def get_queryset_data(self): - article_list = Article.objects.filter(type='a', status='p') - return article_list + def get_queryset_data(self): #ZNY 实现获取查询集数据方法 + article_list = Article.objects.filter(type='a', status='p') #ZNY 获取所有已发布的普通文章 + return article_list #ZNY 返回文章列表 - def get_queryset_cache_key(self): - cache_key = 'index_{page}'.format(page=self.page_number) - return cache_key + def get_queryset_cache_key(self): #ZNY 实现获取查询集缓存键方法 + cache_key = 'index_{page}'.format(page=self.page_number) #ZNY 生成首页缓存键,包含页码 + return cache_key #ZNY 返回缓存键 -class ArticleDetailView(DetailView): +class ArticleDetailView(DetailView): #ZNY 文章详情视图,继承Django通用详情视图 ''' 文章详情页面 ''' - template_name = 'blog/article_detail.html' - model = Article - pk_url_kwarg = 'article_id' - context_object_name = "article" - - def get_context_data(self, **kwargs): - comment_form = CommentForm() - - article_comments = self.object.comment_list() - parent_comments = article_comments.filter(parent_comment=None) - blog_setting = get_blog_setting() - paginator = Paginator(parent_comments, blog_setting.article_comment_count) - page = self.request.GET.get('comment_page', '1') - if not page.isnumeric(): - page = 1 - else: - page = int(page) - if page < 1: - page = 1 - if page > paginator.num_pages: - page = paginator.num_pages - - p_comments = paginator.page(page) - next_page = p_comments.next_page_number() if p_comments.has_next() else None - prev_page = p_comments.previous_page_number() if p_comments.has_previous() else None - - if next_page: - kwargs[ + template_name = 'blog/article_detail.html' #ZNY 指定详情页模板 + model = Article #ZNY 指定模型类 + pk_url_kwarg = 'article_id' #ZNY URL中的主键参数名 + context_object_name = "article" #ZNY 模板中使用的上下文变量名 + + def get_context_data(self, **kwargs): #ZNY 重写获取上下文数据方法 + comment_form = CommentForm() #ZNY 创建评论表单实例 + + article_comments = self.object.comment_list() #ZNY 获取文章评论列表 + parent_comments = article_comments.filter(parent_comment=None) #ZNY 获取顶级评论(无父评论) + blog_setting = get_blog_setting() #ZNY 获取博客设置 + paginator = Paginator(parent_comments, blog_setting.article_comment_count) #ZNY 创建评论分页器 + page = self.request.GET.get('comment_page', '1') #ZNY 获取评论页码,默认为1 + if not page.isnumeric(): #ZNY 如果页码不是数字 + page = 1 #ZNY 设置为第一页 + else: #ZNY 如果是数字 + page = int(page) #ZNY 转换为整数 + if page < 1: #ZNY 如果页码小于1 + page = 1 #ZNY 设置为第一页 + if page > paginator.num_pages: #ZNY 如果页码大于总页数 + page = paginator.num_pages #ZNY 设置为最后一页 + + p_comments = paginator.page(page) #ZNY 获取指定页的评论 + next_page = p_comments.next_page_number() if p_comments.has_next() else None #ZNY 计算下一页页码 + prev_page = p_comments.previous_page_number() if p_comments.has_previous() else None #ZNY 计算上一页页码 + + if next_page: #ZNY 如果存在下一页 + kwargs[ #ZNY 设置下一页评论URL 'comment_next_page_url'] = self.object.get_absolute_url() + f'?comment_page={next_page}#commentlist-container' - if prev_page: - kwargs[ + if prev_page: #ZNY 如果存在上一页 + kwargs[ #ZNY 设置上一页评论URL 'comment_prev_page_url'] = self.object.get_absolute_url() + f'?comment_page={prev_page}#commentlist-container' - kwargs['form'] = comment_form - kwargs['article_comments'] = article_comments - kwargs['p_comments'] = p_comments - kwargs['comment_count'] = len( + kwargs['form'] = comment_form #ZNY 添加评论表单到上下文 + kwargs['article_comments'] = article_comments #ZNY 添加所有评论到上下文 + kwargs['p_comments'] = p_comments #ZNY 添加分页评论到上下文 + kwargs['comment_count'] = len( #ZNY 添加评论总数到上下文 article_comments) if article_comments else 0 - kwargs['next_article'] = self.object.next_article - kwargs['prev_article'] = self.object.prev_article + kwargs['next_article'] = self.object.next_article #ZNY 添加下一篇文章到上下文 + kwargs['prev_article'] = self.object.prev_article #ZNY 添加上一篇文章到上下文 - context = super(ArticleDetailView, self).get_context_data(**kwargs) - article = self.object + context = super(ArticleDetailView, self).get_context_data(**kwargs) #ZNY 调用父类方法获取基础上下文 + article = self.object #ZNY 获取当前文章对象 # Action Hook, 通知插件"文章详情已获取" - hooks.run_action('after_article_body_get', article=article, request=self.request) + hooks.run_action('after_article_body_get', article=article, request=self.request) #ZNY 执行文章内容获取后的动作钩子 # # Filter Hook, 允许插件修改文章正文 - article.body = hooks.apply_filters(ARTICLE_CONTENT_HOOK_NAME, article.body, article=article, + article.body = hooks.apply_filters(ARTICLE_CONTENT_HOOK_NAME, article.body, article=article, #ZNY 应用文章内容过滤器 request=self.request) - return context + return context #ZNY 返回完整的上下文数据 -class CategoryDetailView(ArticleListView): +class CategoryDetailView(ArticleListView): #ZNY 分类详情视图,继承文章列表视图 ''' 分类目录列表 ''' - page_type = "分类目录归档" + page_type = "分类目录归档" #ZNY 设置页面类型 - def get_queryset_data(self): - slug = self.kwargs['category_name'] - category = get_object_or_404(Category, slug=slug) + def get_queryset_data(self): #ZNY 实现获取查询集数据方法 + slug = self.kwargs['category_name'] #ZNY 从URL参数获取分类slug + category = get_object_or_404(Category, slug=slug) #ZNY 获取分类对象,不存在则404 - categoryname = category.name - self.categoryname = categoryname - categorynames = list( + categoryname = category.name #ZNY 获取分类名称 + self.categoryname = categoryname #ZNY 保存分类名称到实例变量 + categorynames = list( #ZNY 获取所有子分类名称列表 map(lambda c: c.name, category.get_sub_categorys())) - article_list = Article.objects.filter( + article_list = Article.objects.filter( #ZNY 获取该分类及其子分类下的所有已发布文章 category__name__in=categorynames, status='p') - return article_list - - def get_queryset_cache_key(self): - slug = self.kwargs['category_name'] - category = get_object_or_404(Category, slug=slug) - categoryname = category.name - self.categoryname = categoryname - cache_key = 'category_list_{categoryname}_{page}'.format( + return article_list #ZNY 返回文章列表 + + def get_queryset_cache_key(self): #ZNY 实现获取查询集缓存键方法 + slug = self.kwargs['category_name'] #ZNY 从URL参数获取分类slug + category = get_object_or_404(Category, slug=slug) #ZNY 获取分类对象 + categoryname = category.name #ZNY 获取分类名称 + self.categoryname = categoryname #ZNY 保存分类名称到实例变量 + cache_key = 'category_list_{categoryname}_{page}'.format( #ZNY 生成分类缓存键 categoryname=categoryname, page=self.page_number) - return cache_key + return cache_key #ZNY 返回缓存键 - def get_context_data(self, **kwargs): + def get_context_data(self, **kwargs): #ZNY 重写获取上下文数据方法 - categoryname = self.categoryname + categoryname = self.categoryname #ZNY 获取分类名称 try: - categoryname = categoryname.split('/')[-1] + categoryname = categoryname.split('/')[-1] #ZNY 尝试获取分类路径的最后一部分 except BaseException: - pass - kwargs['page_type'] = CategoryDetailView.page_type - kwargs['tag_name'] = categoryname - return super(CategoryDetailView, self).get_context_data(**kwargs) + pass #ZNY 如果出错则忽略 + kwargs['page_type'] = CategoryDetailView.page_type #ZNY 添加页面类型到上下文 + kwargs['tag_name'] = categoryname #ZNY 添加分类名称到上下文 + return super(CategoryDetailView, self).get_context_data(**kwargs) #ZNY 调用父类方法 -class AuthorDetailView(ArticleListView): +class AuthorDetailView(ArticleListView): #ZNY 作者详情视图,继承文章列表视图 ''' 作者详情页 ''' - page_type = '作者文章归档' + page_type = '作者文章归档' #ZNY 设置页面类型 - def get_queryset_cache_key(self): - from uuslug import slugify - author_name = slugify(self.kwargs['author_name']) - cache_key = 'author_{author_name}_{page}'.format( + def get_queryset_cache_key(self): #ZNY 实现获取查询集缓存键方法 + from uuslug import slugify #ZNY 导入slugify函数 + author_name = slugify(self.kwargs['author_name']) #ZNY 对作者名称进行slugify处理 + cache_key = 'author_{author_name}_{page}'.format( #ZNY 生成作者缓存键 author_name=author_name, page=self.page_number) - return cache_key + return cache_key #ZNY 返回缓存键 - def get_queryset_data(self): - author_name = self.kwargs['author_name'] - article_list = Article.objects.filter( + def get_queryset_data(self): #ZNY 实现获取查询集数据方法 + author_name = self.kwargs['author_name'] #ZNY 从URL参数获取作者名称 + article_list = Article.objects.filter( #ZNY 获取该作者的所有已发布普通文章 author__username=author_name, type='a', status='p') - return article_list + return article_list #ZNY 返回文章列表 - def get_context_data(self, **kwargs): - author_name = self.kwargs['author_name'] - kwargs['page_type'] = AuthorDetailView.page_type - kwargs['tag_name'] = author_name - return super(AuthorDetailView, self).get_context_data(**kwargs) + def get_context_data(self, **kwargs): #ZNY 重写获取上下文数据方法 + author_name = self.kwargs['author_name'] #ZNY 获取作者名称 + kwargs['page_type'] = AuthorDetailView.page_type #ZNY 添加页面类型到上下文 + kwargs['tag_name'] = author_name #ZNY 添加作者名称到上下文 + return super(AuthorDetailView, self).get_context_data(**kwargs) #ZNY 调用父类方法 -class TagDetailView(ArticleListView): +class TagDetailView(ArticleListView): #ZNY 标签详情视图,继承文章列表视图 ''' 标签列表页面 ''' - page_type = '分类标签归档' - - def get_queryset_data(self): - slug = self.kwargs['tag_name'] - tag = get_object_or_404(Tag, slug=slug) - tag_name = tag.name - self.name = tag_name - article_list = Article.objects.filter( + page_type = '分类标签归档' #ZNY 设置页面类型 + + def get_queryset_data(self): #ZNY 实现获取查询集数据方法 + slug = self.kwargs['tag_name'] #ZNY 从URL参数获取标签slug + tag = get_object_or_404(Tag, slug=slug) #ZNY 获取标签对象,不存在则404 + tag_name = tag.name #ZNY 获取标签名称 + self.name = tag_name #ZNY 保存标签名称到实例变量 + article_list = Article.objects.filter( #ZNY 获取该标签下的所有已发布普通文章 tags__name=tag_name, type='a', status='p') - return article_list - - def get_queryset_cache_key(self): - slug = self.kwargs['tag_name'] - tag = get_object_or_404(Tag, slug=slug) - tag_name = tag.name - self.name = tag_name - cache_key = 'tag_{tag_name}_{page}'.format( + return article_list #ZNY 返回文章列表 + + def get_queryset_cache_key(self): #ZNY 实现获取查询集缓存键方法 + slug = self.kwargs['tag_name'] #ZNY 从URL参数获取标签slug + tag = get_object_or_404(Tag, slug=slug) #ZNY 获取标签对象 + tag_name = tag.name #ZNY 获取标签名称 + self.name = tag_name #ZNY 保存标签名称到实例变量 + cache_key = 'tag_{tag_name}_{page}'.format( #ZNY 生成标签缓存键 tag_name=tag_name, page=self.page_number) - return cache_key + return cache_key #ZNY 返回缓存键 - def get_context_data(self, **kwargs): - # tag_name = self.kwargs['tag_name'] - tag_name = self.name - kwargs['page_type'] = TagDetailView.page_type - kwargs['tag_name'] = tag_name - return super(TagDetailView, self).get_context_data(**kwargs) + def get_context_data(self, **kwargs): #ZNY 重写获取上下文数据方法 + # tag_name = self.kwargs['tag_name'] #ZNY 注释掉的获取标签名称方式 + tag_name = self.name #ZNY 从实例变量获取标签名称 + kwargs['page_type'] = TagDetailView.page_type #ZNY 添加页面类型到上下文 + kwargs['tag_name'] = tag_name #ZNY 添加标签名称到上下文 + return super(TagDetailView, self).get_context_data(**kwargs) #ZNY 调用父类方法 -class ArchivesView(ArticleListView): +class ArchivesView(ArticleListView): #ZNY 文章归档视图,继承文章列表视图 ''' 文章归档页面 ''' - page_type = '文章归档' - paginate_by = None - page_kwarg = None - template_name = 'blog/article_archives.html' + page_type = '文章归档' #ZNY 设置页面类型 + paginate_by = None #ZNY 不分页 + page_kwarg = None #ZNY 无分页参数 + template_name = 'blog/article_archives.html' #ZNY 指定归档页面模板 - def get_queryset_data(self): - return Article.objects.filter(status='p').all() + def get_queryset_data(self): #ZNY 实现获取查询集数据方法 + return Article.objects.filter(status='p').all() #ZNY 获取所有已发布文章 - def get_queryset_cache_key(self): - cache_key = 'archives' - return cache_key + def get_queryset_cache_key(self): #ZNY 实现获取查询集缓存键方法 + cache_key = 'archives' #ZNY 归档页面使用固定缓存键 + return cache_key #ZNY 返回缓存键 -class LinkListView(ListView): - model = Links - template_name = 'blog/links_list.html' +class LinkListView(ListView): #ZNY 友情链接列表视图,继承Django通用列表视图 + model = Links #ZNY 指定模型类 + template_name = 'blog/links_list.html' #ZNY 指定模板文件 - def get_queryset(self): - return Links.objects.filter(is_enable=True) + def get_queryset(self): #ZNY 重写获取查询集方法 + return Links.objects.filter(is_enable=True) #ZNY 只返回启用的友情链接 -class EsSearchView(SearchView): - def get_context(self): - paginator, page = self.build_page() - context = { - "query": self.query, - "form": self.form, - "page": page, - "paginator": paginator, - "suggestion": None, +class EsSearchView(SearchView): #ZNY Elasticsearch搜索视图,继承Haystack搜索视图 + def get_context(self): #ZNY 重写获取上下文方法 + paginator, page = self.build_page() #ZNY 构建分页 + context = { #ZNY 构建上下文字典 + "query": self.query, #ZNY 搜索查询词 + "form": self.form, #ZNY 搜索表单 + "page": page, #ZNY 当前页 + "paginator": paginator, #ZNY 分页器 + "suggestion": None, #ZNY 搜索建议,初始为None } - if hasattr(self.results, "query") and self.results.query.backend.include_spelling: - context["suggestion"] = self.results.query.get_spelling_suggestion() - context.update(self.extra_context()) + if hasattr(self.results, "query") and self.results.query.backend.include_spelling: #ZNY 如果支持拼写建议 + context["suggestion"] = self.results.query.get_spelling_suggestion() #ZNY 获取拼写建议 + context.update(self.extra_context()) #ZNY 更新额外上下文 - return context + return context #ZNY 返回完整上下文 -@csrf_exempt -def fileupload(request): +@csrf_exempt #ZNY 免除CSRF保护 +def fileupload(request): #ZNY 文件上传视图函数 """ 该方法需自己写调用端来上传图片,该方法仅提供图床功能 :param request: :return: """ - if request.method == 'POST': - sign = request.GET.get('sign', None) - if not sign: - return HttpResponseForbidden() - if not sign == get_sha256(get_sha256(settings.SECRET_KEY)): - return HttpResponseForbidden() - response = [] - for filename in request.FILES: - timestr = timezone.now().strftime('%Y/%m/%d') - imgextensions = ['jpg', 'png', 'jpeg', 'bmp'] - fname = u''.join(str(filename)) - isimage = len([i for i in imgextensions if fname.find(i) >= 0]) > 0 - base_dir = os.path.join(settings.STATICFILES, "files" if not isimage else "image", timestr) - if not os.path.exists(base_dir): - os.makedirs(base_dir) - savepath = os.path.normpath(os.path.join(base_dir, f"{uuid.uuid4().hex}{os.path.splitext(filename)[-1]}")) - if not savepath.startswith(base_dir): - return HttpResponse("only for post") - with open(savepath, 'wb+') as wfile: - for chunk in request.FILES[filename].chunks(): + if request.method == 'POST': #ZNY 只处理POST请求 + sign = request.GET.get('sign', None) #ZNY 从GET参数获取签名 + if not sign: #ZNY 如果没有签名 + return HttpResponseForbidden() #ZNY 返回403禁止访问 + if not sign == get_sha256(get_sha256(settings.SECRET_KEY)): #ZNY 验证签名是否正确 + return HttpResponseForbidden() #ZNY 签名错误返回403 + response = [] #ZNY 初始化响应列表 + for filename in request.FILES: #ZNY 遍历所有上传的文件 + timestr = timezone.now().strftime('%Y/%m/%d') #ZNY 生成时间目录字符串 + imgextensions = ['jpg', 'png', 'jpeg', 'bmp'] #ZNY 图片扩展名列表 + fname = u''.join(str(filename)) #ZNY 获取文件名 + isimage = len([i for i in imgextensions if fname.find(i) >= 0]) > 0 #ZNY 判断是否为图片文件 + base_dir = os.path.join(settings.STATICFILES, "files" if not isimage else "image", timestr) #ZNY 构建保存目录 + if not os.path.exists(base_dir): #ZNY 如果目录不存在 + os.makedirs(base_dir) #ZNY 创建目录 + savepath = os.path.normpath(os.path.join(base_dir, f"{uuid.uuid4().hex}{os.path.splitext(filename)[-1]}")) #ZNY 生成保存路径,使用UUID作为文件名 + if not savepath.startswith(base_dir): #ZNY 安全检查,确保路径在指定目录内 + return HttpResponse("only for post") #ZNY 路径非法返回错误 + with open(savepath, 'wb+') as wfile: #ZNY 打开文件进行写入 + for chunk in request.FILES[filename].chunks(): #ZNY 分块写入文件 wfile.write(chunk) - if isimage: - from PIL import Image - image = Image.open(savepath) - image.save(savepath, quality=20, optimize=True) - url = static(savepath) - response.append(url) - return HttpResponse(response) + if isimage: #ZNY 如果是图片文件 + from PIL import Image #ZNY 导入PIL库 + image = Image.open(savepath) #ZNY 打开图片 + image.save(savepath, quality=20, optimize=True) #ZNY 压缩图片并保存 + url = static(savepath) #ZNY 生成静态文件URL + response.append(url) #ZNY 将URL添加到响应列表 + return HttpResponse(response) #ZNY 返回URL列表 - else: - return HttpResponse("only for post") + else: #ZNY 非POST请求 + return HttpResponse("only for post") #ZNY 返回只支持POST请求 -def page_not_found_view( +def page_not_found_view( #ZNY 404页面未找到视图 request, exception, template_name='blog/error_page.html'): - if exception: - logger.error(exception) - url = request.get_full_path() - return render(request, + if exception: #ZNY 如果有异常信息 + logger.error(exception) #ZNY 记录错误日志 + url = request.get_full_path() #ZNY 获取请求的完整路径 + return render(request, #ZNY 渲染错误页面 template_name, {'message': _('Sorry, the page you requested is not found, please click the home page to see other?'), - 'statuscode': '404'}, - status=404) + 'statuscode': '404'}, #ZNY 错误消息和状态码 + status=404) #ZNY 返回404状态码 -def server_error_view(request, template_name='blog/error_page.html'): - return render(request, +def server_error_view(request, template_name='blog/error_page.html'): #ZNY 500服务器错误视图 + return render(request, #ZNY 渲染错误页面 template_name, {'message': _('Sorry, the server is busy, please click the home page to see other?'), - 'statuscode': '500'}, - status=500) + 'statuscode': '500'}, #ZNY 错误消息和状态码 + status=500) #ZNY 返回500状态码 -def permission_denied_view( +def permission_denied_view( #ZNY 403权限拒绝视图 request, exception, template_name='blog/error_page.html'): - if exception: - logger.error(exception) - return render( + if exception: #ZNY 如果有异常信息 + logger.error(exception) #ZNY 记录错误日志 + return render( #ZNY 渲染错误页面 request, template_name, { 'message': _('Sorry, you do not have permission to access this page?'), - 'statuscode': '403'}, status=403) + 'statuscode': '403'}, status=403) #ZNY 错误消息和状态码,返回403状态码 -def clean_cache_view(request): - cache.clear() - return HttpResponse('ok') +def clean_cache_view(request): #ZNY 清理缓存视图 + cache.clear() #ZNY 清除所有缓存 + return HttpResponse('ok') #ZNY 返回成功响应 \ No newline at end of file