为文章ID路径参数(整数类型)
+ views.CommentPostView.as_view(), # gst: 关联评论提交处理视图(基于类的视图)
+ name='postcomment' # gst: URL名称,用于模板反向解析(如reverse('comments:postcomment'))
+ ),
+]
\ No newline at end of file
diff --git a/djangoblog/src/DjangoBlog-master/DjangoBlog-master/comments/utils.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/comments/utils.py
new file mode 100644
index 00000000..c2cb1ffa
--- /dev/null
+++ b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/comments/utils.py
@@ -0,0 +1,65 @@
+# gst: 导入日志模块,用于记录函数执行过程中的异常信息
+import logging
+
+# gst: 导入国际化翻译工具(别名_),支持邮件内容多语言显示
+from django.utils.translation import gettext_lazy as _
+
+# gst: 导入项目工具函数,用于获取当前站点信息和发送邮件
+from djangoblog.utils import get_current_site # 获取当前站点域名
+from djangoblog.utils import send_email # 邮件发送工具函数
+
+# gst: 初始化日志器,日志名称为当前模块名(便于定位日志来源)
+logger = logging.getLogger(__name__)
+
+
+def send_comment_email(comment):
+ """
+ gst: 评论邮件通知函数,发送两类邮件:
+ 1. 给评论者的感谢邮件(确认评论提交成功)
+ 2. 给父评论者的回复通知邮件(告知其评论收到回复)
+ :param comment: 评论对象(包含评论者、关联文章、父评论等信息)
+ """
+ # gst: 获取当前站点域名(用于拼接文章访问链接)
+ site = get_current_site().domain
+ # gst: 邮件主题(支持国际化翻译)
+ subject = _('Thanks for your comment')
+ # gst: 拼接文章的完整访问URL(HTTPS协议 + 站点域名 + 文章绝对路径)
+ article_url = f"https://{site}{comment.article.get_absolute_url()}"
+
+ # gst: 构造给评论者的感谢邮件HTML内容
+ html_content = _("""Thank you very much for your comments on this site
+ You can visit %(article_title)s
+ to review your comments,
+ Thank you again!
+
+ If the link above cannot be opened, please copy this link to your browser.
+ %(article_url)s""") % {'article_url': article_url, 'article_title': comment.article.title}
+
+ # gst: 获取评论者的邮箱地址(邮件接收人)
+ tomail = comment.author.email
+ # gst: 发送感谢邮件(接收人列表、主题、HTML内容)
+ send_email([tomail], subject, html_content)
+
+ try:
+ # gst: 判断当前评论是否为回复(存在父评论)
+ if comment.parent_comment:
+ # gst: 构造给父评论者的回复通知邮件HTML内容
+ html_content = _("""Your comment on %(article_title)s
has
+ received a reply.
%(comment_body)s
+
+ go check it out!
+
+ If the link above cannot be opened, please copy this link to your browser.
+ %(article_url)s
+ """) % {
+ 'article_url': article_url, # 文章访问链接
+ 'article_title': comment.article.title, # 文章标题
+ 'comment_body': comment.parent_comment.body # 父评论的正文内容
+ }
+ # gst: 获取父评论者的邮箱地址(回复通知接收人)
+ tomail = comment.parent_comment.author.email
+ # gst: 发送回复通知邮件
+ send_email([tomail], subject, html_content)
+ except Exception as e:
+ # gst: 捕获邮件发送过程中的异常,记录错误日志(不中断程序执行)
+ logger.error(e)
\ No newline at end of file
diff --git a/djangoblog/src/DjangoBlog-master/DjangoBlog-master/comments/views.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/comments/views.py
new file mode 100644
index 00000000..94056678
--- /dev/null
+++ b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/comments/views.py
@@ -0,0 +1,91 @@
+# gst: 导入Django核心模块,用于异常处理、HTTP响应、数据查询等
+from django.core.exceptions import ValidationError # 数据验证异常(用于评论关闭时抛出错误)
+from django.http import HttpResponseRedirect # 重定向响应类
+from django.shortcuts import get_object_or_404 # 查找数据,不存在则返回404
+from django.utils.decorators import method_decorator # 用于给类视图方法添加装饰器
+from django.views.decorators.csrf import csrf_protect # CSRF保护装饰器(防止跨站请求伪造)
+from django.views.generic.edit import FormView # 基于类的表单处理视图(简化表单提交逻辑)
+
+# gst: 导入关联模型和表单,用于视图数据处理
+from accounts.models import BlogUser # 用户模型(评论作者)
+from blog.models import Article # 文章模型(评论关联对象)
+from .forms import CommentForm # 评论表单(用于数据验证和提交)
+from .models import Comment # 评论模型(用于保存评论数据)
+
+
+class CommentPostView(FormView):
+ """
+ gst: 评论提交视图类,继承FormView(专门处理表单提交的通用视图)
+ 负责评论表单的展示、数据验证、提交保存及跳转逻辑
+ """
+ form_class = CommentForm # gst: 关联的表单类(CommentForm),用于验证提交数据
+ template_name = 'blog/article_detail.html' # gst: 表单验证失败时渲染的模板(文章详情页)
+
+ @method_decorator(csrf_protect)
+ def dispatch(self, *args, **kwargs):
+ """
+ gst: 重写dispatch方法,添加CSRF保护装饰器
+ 确保所有通过该视图的请求都经过CSRF验证,防止跨站请求伪造攻击
+ """
+ return super(CommentPostView, self).dispatch(*args, **kwargs) # gst: 调用父类dispatch方法,保持原有逻辑
+
+ def get(self, request, *args, **kwargs):
+ """
+ gst: 处理GET请求(直接访问评论提交URL时)
+ 重定向到对应文章详情页的评论区,避免直接访问表单提交接口
+ """
+ article_id = self.kwargs['article_id'] # gst: 从URL路径参数中获取文章ID
+ article = get_object_or_404(Article, pk=article_id) # gst: 查找文章,不存在则返回404
+ url = article.get_absolute_url() # gst: 获取文章的绝对路径(详情页URL)
+ return HttpResponseRedirect(url + "#comments") # gst: 重定向到文章详情页的评论区锚点
+
+ def form_invalid(self, form):
+ """
+ gst: 表单数据验证失败时的处理逻辑
+ 渲染文章详情页,携带错误表单数据,展示验证失败信息
+ """
+ article_id = self.kwargs['article_id'] # gst: 从URL参数获取文章ID
+ article = get_object_or_404(Article, pk=article_id) # gst: 获取对应的文章对象
+
+ # gst: 返回文章详情页模板,传递错误表单和文章对象(用于页面渲染错误信息)
+ return self.render_to_response({
+ 'form': form, # 验证失败的表单(含错误信息)
+ 'article': article # 关联的文章对象
+ })
+
+ def form_valid(self, form):
+ """
+ gst: 表单数据验证合法后的核心逻辑
+ 处理评论保存、状态设置、回复关联等业务,最后重定向到评论位置
+ """
+ user = self.request.user # gst: 获取当前登录用户(评论提交者)
+ author = BlogUser.objects.get(pk=user.pk) # gst: 通过用户ID获取对应的BlogUser对象(评论作者)
+ article_id = self.kwargs['article_id'] # gst: 从URL参数获取文章ID
+ article = get_object_or_404(Article, pk=article_id) # gst: 获取评论关联的文章,不存在则404
+
+ # gst: 检查文章状态:评论关闭(comment_status='c')或文章草稿(status='c')时,禁止评论
+ if article.comment_status == 'c' or article.status == 'c':
+ raise ValidationError("该文章评论已关闭.") # gst: 抛出验证错误,终止评论提交
+
+ comment = form.save(False) # gst: 表单数据暂存(不立即保存到数据库)
+ comment.article = article # gst: 关联评论到当前文章
+
+ # gst: 获取博客全局设置,判断评论是否需要审核
+ from djangoblog.utils import get_blog_setting
+ settings = get_blog_setting()
+ if not settings.comment_need_review: # gst: 若不需要审核,直接启用评论
+ comment.is_enable = True
+ comment.author = author # gst: 关联评论作者
+
+ # gst: 处理回复功能:若表单提交了父评论ID,关联到对应的父评论
+ if form.cleaned_data['parent_comment_id']:
+ parent_comment = Comment.objects.get(
+ pk=form.cleaned_data['parent_comment_id']) # gst: 根据ID获取父评论对象
+ comment.parent_comment = parent_comment # gst: 关联当前评论到父评论
+
+ comment.save(True) # gst: 最终保存评论数据到数据库(True表示执行完整保存逻辑)
+
+ # gst: 重定向到文章详情页的当前评论位置(锚点定位到具体评论)
+ return HttpResponseRedirect(
+ "%s#div-comment-%d" %
+ (article.get_absolute_url(), comment.pk)) # 拼接URL:文章绝对路径 + 评论ID锚点
\ No newline at end of file
diff --git a/src/DjangoBlog-master/DjangoBlog-master/deploy/docker-compose/docker-compose.es.yml b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/deploy/docker-compose/docker-compose.es.yml
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/deploy/docker-compose/docker-compose.es.yml
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/deploy/docker-compose/docker-compose.es.yml
diff --git a/src/DjangoBlog-master/DjangoBlog-master/deploy/docker-compose/docker-compose.yml b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/deploy/docker-compose/docker-compose.yml
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/deploy/docker-compose/docker-compose.yml
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/deploy/docker-compose/docker-compose.yml
diff --git a/src/DjangoBlog-master/DjangoBlog-master/deploy/entrypoint.sh b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/deploy/entrypoint.sh
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/deploy/entrypoint.sh
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/deploy/entrypoint.sh
diff --git a/src/DjangoBlog-master/DjangoBlog-master/deploy/k8s/configmap.yaml b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/deploy/k8s/configmap.yaml
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/deploy/k8s/configmap.yaml
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/deploy/k8s/configmap.yaml
diff --git a/src/DjangoBlog-master/DjangoBlog-master/deploy/k8s/deployment.yaml b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/deploy/k8s/deployment.yaml
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/deploy/k8s/deployment.yaml
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/deploy/k8s/deployment.yaml
diff --git a/src/DjangoBlog-master/DjangoBlog-master/deploy/k8s/gateway.yaml b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/deploy/k8s/gateway.yaml
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/deploy/k8s/gateway.yaml
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/deploy/k8s/gateway.yaml
diff --git a/src/DjangoBlog-master/DjangoBlog-master/deploy/k8s/pv.yaml b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/deploy/k8s/pv.yaml
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/deploy/k8s/pv.yaml
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/deploy/k8s/pv.yaml
diff --git a/src/DjangoBlog-master/DjangoBlog-master/deploy/k8s/pvc.yaml b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/deploy/k8s/pvc.yaml
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/deploy/k8s/pvc.yaml
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/deploy/k8s/pvc.yaml
diff --git a/src/DjangoBlog-master/DjangoBlog-master/deploy/k8s/service.yaml b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/deploy/k8s/service.yaml
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/deploy/k8s/service.yaml
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/deploy/k8s/service.yaml
diff --git a/src/DjangoBlog-master/DjangoBlog-master/deploy/k8s/storageclass.yaml b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/deploy/k8s/storageclass.yaml
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/deploy/k8s/storageclass.yaml
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/deploy/k8s/storageclass.yaml
diff --git a/src/DjangoBlog-master/DjangoBlog-master/deploy/nginx.conf b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/deploy/nginx.conf
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/deploy/nginx.conf
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/deploy/nginx.conf
diff --git a/src/DjangoBlog-master/DjangoBlog-master/djangoblog/__init__.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/djangoblog/__init__.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/djangoblog/__init__.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/djangoblog/__init__.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/djangoblog/admin_site.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/djangoblog/admin_site.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/djangoblog/admin_site.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/djangoblog/admin_site.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/djangoblog/apps.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/djangoblog/apps.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/djangoblog/apps.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/djangoblog/apps.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/djangoblog/blog_signals.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/djangoblog/blog_signals.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/djangoblog/blog_signals.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/djangoblog/blog_signals.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/djangoblog/elasticsearch_backend.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/djangoblog/elasticsearch_backend.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/djangoblog/elasticsearch_backend.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/djangoblog/elasticsearch_backend.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/djangoblog/feeds.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/djangoblog/feeds.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/djangoblog/feeds.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/djangoblog/feeds.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/djangoblog/logentryadmin.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/djangoblog/logentryadmin.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/djangoblog/logentryadmin.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/djangoblog/logentryadmin.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/djangoblog/plugin_manage/base_plugin.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/djangoblog/plugin_manage/base_plugin.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/djangoblog/plugin_manage/base_plugin.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/djangoblog/plugin_manage/base_plugin.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/djangoblog/plugin_manage/hook_constants.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/djangoblog/plugin_manage/hook_constants.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/djangoblog/plugin_manage/hook_constants.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/djangoblog/plugin_manage/hook_constants.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/djangoblog/plugin_manage/hooks.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/djangoblog/plugin_manage/hooks.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/djangoblog/plugin_manage/hooks.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/djangoblog/plugin_manage/hooks.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/djangoblog/plugin_manage/loader.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/djangoblog/plugin_manage/loader.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/djangoblog/plugin_manage/loader.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/djangoblog/plugin_manage/loader.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/djangoblog/settings.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/djangoblog/settings.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/djangoblog/settings.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/djangoblog/settings.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/djangoblog/sitemap.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/djangoblog/sitemap.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/djangoblog/sitemap.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/djangoblog/sitemap.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/djangoblog/spider_notify.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/djangoblog/spider_notify.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/djangoblog/spider_notify.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/djangoblog/spider_notify.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/djangoblog/tests.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/djangoblog/tests.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/djangoblog/tests.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/djangoblog/tests.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/djangoblog/urls.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/djangoblog/urls.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/djangoblog/urls.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/djangoblog/urls.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/djangoblog/utils.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/djangoblog/utils.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/djangoblog/utils.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/djangoblog/utils.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/djangoblog/whoosh_cn_backend.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/djangoblog/whoosh_cn_backend.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/djangoblog/whoosh_cn_backend.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/djangoblog/whoosh_cn_backend.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/djangoblog/wsgi.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/djangoblog/wsgi.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/djangoblog/wsgi.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/djangoblog/wsgi.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/docs/README-en.md b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/docs/README-en.md
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/docs/README-en.md
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/docs/README-en.md
diff --git a/src/DjangoBlog-master/DjangoBlog-master/docs/config-en.md b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/docs/config-en.md
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/docs/config-en.md
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/docs/config-en.md
diff --git a/src/DjangoBlog-master/DjangoBlog-master/docs/config.md b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/docs/config.md
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/docs/config.md
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/docs/config.md
diff --git a/src/DjangoBlog-master/DjangoBlog-master/docs/docker-en.md b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/docs/docker-en.md
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/docs/docker-en.md
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/docs/docker-en.md
diff --git a/src/DjangoBlog-master/DjangoBlog-master/docs/docker.md b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/docs/docker.md
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/docs/docker.md
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/docs/docker.md
diff --git a/src/DjangoBlog-master/DjangoBlog-master/docs/es.md b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/docs/es.md
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/docs/es.md
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/docs/es.md
diff --git a/src/DjangoBlog-master/DjangoBlog-master/docs/imgs/alipay.jpg b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/docs/imgs/alipay.jpg
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/docs/imgs/alipay.jpg
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/docs/imgs/alipay.jpg
diff --git a/src/DjangoBlog-master/DjangoBlog-master/docs/imgs/pycharm_logo.png b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/docs/imgs/pycharm_logo.png
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/docs/imgs/pycharm_logo.png
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/docs/imgs/pycharm_logo.png
diff --git a/src/DjangoBlog-master/DjangoBlog-master/docs/imgs/wechat.jpg b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/docs/imgs/wechat.jpg
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/docs/imgs/wechat.jpg
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/docs/imgs/wechat.jpg
diff --git a/src/DjangoBlog-master/DjangoBlog-master/docs/k8s-en.md b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/docs/k8s-en.md
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/docs/k8s-en.md
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/docs/k8s-en.md
diff --git a/src/DjangoBlog-master/DjangoBlog-master/docs/k8s.md b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/docs/k8s.md
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/docs/k8s.md
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/docs/k8s.md
diff --git a/src/DjangoBlog-master/DjangoBlog-master/locale/en/LC_MESSAGES/django.mo b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/locale/en/LC_MESSAGES/django.mo
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/locale/en/LC_MESSAGES/django.mo
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/locale/en/LC_MESSAGES/django.mo
diff --git a/src/DjangoBlog-master/DjangoBlog-master/locale/en/LC_MESSAGES/django.po b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/locale/en/LC_MESSAGES/django.po
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/locale/en/LC_MESSAGES/django.po
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/locale/en/LC_MESSAGES/django.po
diff --git a/src/DjangoBlog-master/DjangoBlog-master/locale/zh_Hans/LC_MESSAGES/django.mo b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/locale/zh_Hans/LC_MESSAGES/django.mo
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/locale/zh_Hans/LC_MESSAGES/django.mo
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/locale/zh_Hans/LC_MESSAGES/django.mo
diff --git a/src/DjangoBlog-master/DjangoBlog-master/locale/zh_Hans/LC_MESSAGES/django.po b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/locale/zh_Hans/LC_MESSAGES/django.po
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/locale/zh_Hans/LC_MESSAGES/django.po
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/locale/zh_Hans/LC_MESSAGES/django.po
diff --git a/src/DjangoBlog-master/DjangoBlog-master/locale/zh_Hant/LC_MESSAGES/django.mo b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/locale/zh_Hant/LC_MESSAGES/django.mo
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/locale/zh_Hant/LC_MESSAGES/django.mo
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/locale/zh_Hant/LC_MESSAGES/django.mo
diff --git a/src/DjangoBlog-master/DjangoBlog-master/locale/zh_Hant/LC_MESSAGES/django.po b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/locale/zh_Hant/LC_MESSAGES/django.po
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/locale/zh_Hant/LC_MESSAGES/django.po
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/locale/zh_Hant/LC_MESSAGES/django.po
diff --git a/src/DjangoBlog-master/DjangoBlog-master/manage.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/manage.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/manage.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/manage.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/oauth/__init__.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/oauth/__init__.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/oauth/__init__.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/oauth/__init__.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/oauth/admin.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/oauth/admin.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/oauth/admin.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/oauth/admin.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/oauth/apps.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/oauth/apps.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/oauth/apps.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/oauth/apps.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/oauth/forms.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/oauth/forms.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/oauth/forms.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/oauth/forms.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/oauth/migrations/0001_initial.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/oauth/migrations/0001_initial.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/oauth/migrations/0001_initial.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/oauth/migrations/0001_initial.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/oauth/migrations/0002_alter_oauthconfig_options_alter_oauthuser_options_and_more.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/oauth/migrations/0002_alter_oauthconfig_options_alter_oauthuser_options_and_more.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/oauth/migrations/0002_alter_oauthconfig_options_alter_oauthuser_options_and_more.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/oauth/migrations/0002_alter_oauthconfig_options_alter_oauthuser_options_and_more.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/oauth/migrations/0003_alter_oauthuser_nickname.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/oauth/migrations/0003_alter_oauthuser_nickname.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/oauth/migrations/0003_alter_oauthuser_nickname.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/oauth/migrations/0003_alter_oauthuser_nickname.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/oauth/migrations/__init__.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/oauth/migrations/__init__.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/oauth/migrations/__init__.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/oauth/migrations/__init__.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/oauth/models.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/oauth/models.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/oauth/models.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/oauth/models.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/oauth/oauthmanager.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/oauth/oauthmanager.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/oauth/oauthmanager.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/oauth/oauthmanager.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/oauth/templatetags/__init__.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/oauth/templatetags/__init__.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/oauth/templatetags/__init__.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/oauth/templatetags/__init__.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/oauth/templatetags/oauth_tags.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/oauth/templatetags/oauth_tags.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/oauth/templatetags/oauth_tags.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/oauth/templatetags/oauth_tags.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/oauth/tests.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/oauth/tests.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/oauth/tests.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/oauth/tests.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/oauth/urls.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/oauth/urls.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/oauth/urls.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/oauth/urls.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/oauth/views.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/oauth/views.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/oauth/views.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/oauth/views.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/owntracks/__init__.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/owntracks/__init__.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/owntracks/__init__.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/owntracks/__init__.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/owntracks/admin.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/owntracks/admin.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/owntracks/admin.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/owntracks/admin.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/owntracks/apps.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/owntracks/apps.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/owntracks/apps.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/owntracks/apps.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/owntracks/migrations/0001_initial.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/owntracks/migrations/0001_initial.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/owntracks/migrations/0001_initial.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/owntracks/migrations/0001_initial.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/owntracks/migrations/0002_alter_owntracklog_options_and_more.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/owntracks/migrations/0002_alter_owntracklog_options_and_more.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/owntracks/migrations/0002_alter_owntracklog_options_and_more.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/owntracks/migrations/0002_alter_owntracklog_options_and_more.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/owntracks/migrations/__init__.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/owntracks/migrations/__init__.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/owntracks/migrations/__init__.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/owntracks/migrations/__init__.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/owntracks/models.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/owntracks/models.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/owntracks/models.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/owntracks/models.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/owntracks/tests.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/owntracks/tests.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/owntracks/tests.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/owntracks/tests.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/owntracks/urls.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/owntracks/urls.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/owntracks/urls.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/owntracks/urls.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/owntracks/views.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/owntracks/views.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/owntracks/views.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/owntracks/views.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/plugins/__init__.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/plugins/__init__.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/plugins/__init__.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/plugins/__init__.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/plugins/article_copyright/__init__.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/plugins/article_copyright/__init__.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/plugins/article_copyright/__init__.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/plugins/article_copyright/__init__.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/plugins/article_copyright/plugin.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/plugins/article_copyright/plugin.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/plugins/article_copyright/plugin.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/plugins/article_copyright/plugin.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/plugins/external_links/__init__.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/plugins/external_links/__init__.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/plugins/external_links/__init__.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/plugins/external_links/__init__.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/plugins/external_links/plugin.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/plugins/external_links/plugin.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/plugins/external_links/plugin.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/plugins/external_links/plugin.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/plugins/reading_time/__init__.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/plugins/reading_time/__init__.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/plugins/reading_time/__init__.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/plugins/reading_time/__init__.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/plugins/reading_time/plugin.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/plugins/reading_time/plugin.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/plugins/reading_time/plugin.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/plugins/reading_time/plugin.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/plugins/seo_optimizer/__init__.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/plugins/seo_optimizer/__init__.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/plugins/seo_optimizer/__init__.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/plugins/seo_optimizer/__init__.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/plugins/seo_optimizer/plugin.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/plugins/seo_optimizer/plugin.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/plugins/seo_optimizer/plugin.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/plugins/seo_optimizer/plugin.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/plugins/view_count/__init__.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/plugins/view_count/__init__.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/plugins/view_count/__init__.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/plugins/view_count/__init__.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/plugins/view_count/plugin.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/plugins/view_count/plugin.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/plugins/view_count/plugin.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/plugins/view_count/plugin.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/requirements.txt b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/requirements.txt
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/requirements.txt
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/requirements.txt
diff --git a/src/DjangoBlog-master/DjangoBlog-master/servermanager/MemcacheStorage.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/servermanager/MemcacheStorage.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/servermanager/MemcacheStorage.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/servermanager/MemcacheStorage.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/servermanager/__init__.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/servermanager/__init__.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/servermanager/__init__.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/servermanager/__init__.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/servermanager/admin.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/servermanager/admin.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/servermanager/admin.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/servermanager/admin.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/servermanager/api/__init__.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/servermanager/api/__init__.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/servermanager/api/__init__.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/servermanager/api/__init__.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/servermanager/api/blogapi.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/servermanager/api/blogapi.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/servermanager/api/blogapi.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/servermanager/api/blogapi.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/servermanager/api/commonapi.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/servermanager/api/commonapi.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/servermanager/api/commonapi.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/servermanager/api/commonapi.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/servermanager/apps.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/servermanager/apps.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/servermanager/apps.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/servermanager/apps.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/servermanager/migrations/0001_initial.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/servermanager/migrations/0001_initial.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/servermanager/migrations/0001_initial.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/servermanager/migrations/0001_initial.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/servermanager/migrations/0002_alter_emailsendlog_options_and_more.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/servermanager/migrations/0002_alter_emailsendlog_options_and_more.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/servermanager/migrations/0002_alter_emailsendlog_options_and_more.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/servermanager/migrations/0002_alter_emailsendlog_options_and_more.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/servermanager/migrations/__init__.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/servermanager/migrations/__init__.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/servermanager/migrations/__init__.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/servermanager/migrations/__init__.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/servermanager/models.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/servermanager/models.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/servermanager/models.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/servermanager/models.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/servermanager/robot.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/servermanager/robot.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/servermanager/robot.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/servermanager/robot.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/servermanager/tests.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/servermanager/tests.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/servermanager/tests.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/servermanager/tests.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/servermanager/urls.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/servermanager/urls.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/servermanager/urls.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/servermanager/urls.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/servermanager/views.py b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/servermanager/views.py
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/servermanager/views.py
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/servermanager/views.py
diff --git a/src/DjangoBlog-master/DjangoBlog-master/templates/account/forget_password.html b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/account/forget_password.html
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/templates/account/forget_password.html
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/account/forget_password.html
diff --git a/src/DjangoBlog-master/DjangoBlog-master/templates/account/login.html b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/account/login.html
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/templates/account/login.html
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/account/login.html
diff --git a/src/DjangoBlog-master/DjangoBlog-master/templates/account/registration_form.html b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/account/registration_form.html
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/templates/account/registration_form.html
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/account/registration_form.html
diff --git a/src/DjangoBlog-master/DjangoBlog-master/templates/account/result.html b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/account/result.html
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/templates/account/result.html
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/account/result.html
diff --git a/src/DjangoBlog-master/DjangoBlog-master/templates/blog/article_archives.html b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/blog/article_archives.html
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/templates/blog/article_archives.html
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/blog/article_archives.html
diff --git a/src/DjangoBlog-master/DjangoBlog-master/templates/blog/article_detail.html b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/blog/article_detail.html
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/templates/blog/article_detail.html
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/blog/article_detail.html
diff --git a/src/DjangoBlog-master/DjangoBlog-master/templates/blog/article_index.html b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/blog/article_index.html
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/templates/blog/article_index.html
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/blog/article_index.html
diff --git a/src/DjangoBlog-master/DjangoBlog-master/templates/blog/error_page.html b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/blog/error_page.html
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/templates/blog/error_page.html
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/blog/error_page.html
diff --git a/src/DjangoBlog-master/DjangoBlog-master/templates/blog/links_list.html b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/blog/links_list.html
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/templates/blog/links_list.html
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/blog/links_list.html
diff --git a/src/DjangoBlog-master/DjangoBlog-master/templates/blog/tags/article_info.html b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/blog/tags/article_info.html
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/templates/blog/tags/article_info.html
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/blog/tags/article_info.html
diff --git a/src/DjangoBlog-master/DjangoBlog-master/templates/blog/tags/article_meta_info.html b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/blog/tags/article_meta_info.html
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/templates/blog/tags/article_meta_info.html
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/blog/tags/article_meta_info.html
diff --git a/src/DjangoBlog-master/DjangoBlog-master/templates/blog/tags/article_pagination.html b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/blog/tags/article_pagination.html
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/templates/blog/tags/article_pagination.html
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/blog/tags/article_pagination.html
diff --git a/src/DjangoBlog-master/DjangoBlog-master/templates/blog/tags/article_tag_list.html b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/blog/tags/article_tag_list.html
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/templates/blog/tags/article_tag_list.html
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/blog/tags/article_tag_list.html
diff --git a/src/DjangoBlog-master/DjangoBlog-master/templates/blog/tags/breadcrumb.html b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/blog/tags/breadcrumb.html
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/templates/blog/tags/breadcrumb.html
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/blog/tags/breadcrumb.html
diff --git a/src/DjangoBlog-master/DjangoBlog-master/templates/blog/tags/sidebar.html b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/blog/tags/sidebar.html
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/templates/blog/tags/sidebar.html
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/blog/tags/sidebar.html
diff --git a/src/DjangoBlog-master/DjangoBlog-master/templates/comments/tags/comment_item.html b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/comments/tags/comment_item.html
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/templates/comments/tags/comment_item.html
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/comments/tags/comment_item.html
diff --git a/src/DjangoBlog-master/DjangoBlog-master/templates/comments/tags/comment_item_tree.html b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/comments/tags/comment_item_tree.html
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/templates/comments/tags/comment_item_tree.html
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/comments/tags/comment_item_tree.html
diff --git a/src/DjangoBlog-master/DjangoBlog-master/templates/comments/tags/comment_list.html b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/comments/tags/comment_list.html
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/templates/comments/tags/comment_list.html
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/comments/tags/comment_list.html
diff --git a/src/DjangoBlog-master/DjangoBlog-master/templates/comments/tags/post_comment.html b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/comments/tags/post_comment.html
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/templates/comments/tags/post_comment.html
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/comments/tags/post_comment.html
diff --git a/src/DjangoBlog-master/DjangoBlog-master/templates/oauth/bindsuccess.html b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/oauth/bindsuccess.html
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/templates/oauth/bindsuccess.html
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/oauth/bindsuccess.html
diff --git a/src/DjangoBlog-master/DjangoBlog-master/templates/oauth/oauth_applications.html b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/oauth/oauth_applications.html
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/templates/oauth/oauth_applications.html
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/oauth/oauth_applications.html
diff --git a/src/DjangoBlog-master/DjangoBlog-master/templates/oauth/require_email.html b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/oauth/require_email.html
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/templates/oauth/require_email.html
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/oauth/require_email.html
diff --git a/src/DjangoBlog-master/DjangoBlog-master/templates/owntracks/show_log_dates.html b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/owntracks/show_log_dates.html
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/templates/owntracks/show_log_dates.html
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/owntracks/show_log_dates.html
diff --git a/src/DjangoBlog-master/DjangoBlog-master/templates/owntracks/show_maps.html b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/owntracks/show_maps.html
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/templates/owntracks/show_maps.html
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/owntracks/show_maps.html
diff --git a/src/DjangoBlog-master/DjangoBlog-master/templates/search/indexes/blog/article_text.txt b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/search/indexes/blog/article_text.txt
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/templates/search/indexes/blog/article_text.txt
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/search/indexes/blog/article_text.txt
diff --git a/src/DjangoBlog-master/DjangoBlog-master/templates/search/search.html b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/search/search.html
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/templates/search/search.html
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/search/search.html
diff --git a/src/DjangoBlog-master/DjangoBlog-master/templates/share_layout/adsense.html b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/share_layout/adsense.html
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/templates/share_layout/adsense.html
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/share_layout/adsense.html
diff --git a/src/DjangoBlog-master/DjangoBlog-master/templates/share_layout/base.html b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/share_layout/base.html
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/templates/share_layout/base.html
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/share_layout/base.html
diff --git a/src/DjangoBlog-master/DjangoBlog-master/templates/share_layout/base_account.html b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/share_layout/base_account.html
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/templates/share_layout/base_account.html
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/share_layout/base_account.html
diff --git a/src/DjangoBlog-master/DjangoBlog-master/templates/share_layout/footer.html b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/share_layout/footer.html
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/templates/share_layout/footer.html
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/share_layout/footer.html
diff --git a/src/DjangoBlog-master/DjangoBlog-master/templates/share_layout/nav.html b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/share_layout/nav.html
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/templates/share_layout/nav.html
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/share_layout/nav.html
diff --git a/src/DjangoBlog-master/DjangoBlog-master/templates/share_layout/nav_node.html b/djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/share_layout/nav_node.html
similarity index 100%
rename from src/DjangoBlog-master/DjangoBlog-master/templates/share_layout/nav_node.html
rename to djangoblog/src/DjangoBlog-master/DjangoBlog-master/templates/share_layout/nav_node.html
diff --git a/src/DjangoBlog-master/DjangoBlog-master/comments/admin.py b/src/DjangoBlog-master/DjangoBlog-master/comments/admin.py
deleted file mode 100644
index a814f3fd..00000000
--- a/src/DjangoBlog-master/DjangoBlog-master/comments/admin.py
+++ /dev/null
@@ -1,47 +0,0 @@
-from django.contrib import admin
-from django.urls import reverse
-from django.utils.html import format_html
-from django.utils.translation import gettext_lazy as _
-
-
-def disable_commentstatus(modeladmin, request, queryset):
- queryset.update(is_enable=False)
-
-
-def enable_commentstatus(modeladmin, request, queryset):
- queryset.update(is_enable=True)
-
-
-disable_commentstatus.short_description = _('Disable comments')
-enable_commentstatus.short_description = _('Enable comments')
-
-
-class CommentAdmin(admin.ModelAdmin):
- list_per_page = 20
- list_display = (
- 'id',
- 'body',
- 'link_to_userinfo',
- 'link_to_article',
- 'is_enable',
- 'creation_time')
- list_display_links = ('id', 'body', 'is_enable')
- list_filter = ('is_enable',)
- exclude = ('creation_time', 'last_modify_time')
- actions = [disable_commentstatus, enable_commentstatus]
-
- def link_to_userinfo(self, obj):
- info = (obj.author._meta.app_label, obj.author._meta.model_name)
- link = reverse('admin:%s_%s_change' % info, args=(obj.author.id,))
- return format_html(
- u'%s' %
- (link, obj.author.nickname if obj.author.nickname else obj.author.email))
-
- def link_to_article(self, obj):
- info = (obj.article._meta.app_label, obj.article._meta.model_name)
- link = reverse('admin:%s_%s_change' % info, args=(obj.article.id,))
- return format_html(
- u'%s' % (link, obj.article.title))
-
- link_to_userinfo.short_description = _('User')
- link_to_article.short_description = _('Article')
diff --git a/src/DjangoBlog-master/DjangoBlog-master/comments/apps.py b/src/DjangoBlog-master/DjangoBlog-master/comments/apps.py
deleted file mode 100644
index ff01b775..00000000
--- a/src/DjangoBlog-master/DjangoBlog-master/comments/apps.py
+++ /dev/null
@@ -1,5 +0,0 @@
-from django.apps import AppConfig
-
-
-class CommentsConfig(AppConfig):
- name = 'comments'
diff --git a/src/DjangoBlog-master/DjangoBlog-master/comments/forms.py b/src/DjangoBlog-master/DjangoBlog-master/comments/forms.py
deleted file mode 100644
index e83737db..00000000
--- a/src/DjangoBlog-master/DjangoBlog-master/comments/forms.py
+++ /dev/null
@@ -1,13 +0,0 @@
-from django import forms
-from django.forms import ModelForm
-
-from .models import Comment
-
-
-class CommentForm(ModelForm):
- parent_comment_id = forms.IntegerField(
- widget=forms.HiddenInput, required=False)
-
- class Meta:
- model = Comment
- fields = ['body']
diff --git a/src/DjangoBlog-master/DjangoBlog-master/comments/migrations/0001_initial.py b/src/DjangoBlog-master/DjangoBlog-master/comments/migrations/0001_initial.py
deleted file mode 100644
index 61d1e539..00000000
--- a/src/DjangoBlog-master/DjangoBlog-master/comments/migrations/0001_initial.py
+++ /dev/null
@@ -1,38 +0,0 @@
-# Generated by Django 4.1.7 on 2023-03-02 07:14
-
-from django.conf import settings
-from django.db import migrations, models
-import django.db.models.deletion
-import django.utils.timezone
-
-
-class Migration(migrations.Migration):
-
- initial = True
-
- dependencies = [
- ('blog', '0001_initial'),
- migrations.swappable_dependency(settings.AUTH_USER_MODEL),
- ]
-
- operations = [
- migrations.CreateModel(
- name='Comment',
- fields=[
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
- ('body', models.TextField(max_length=300, verbose_name='正文')),
- ('created_time', models.DateTimeField(default=django.utils.timezone.now, verbose_name='创建时间')),
- ('last_mod_time', models.DateTimeField(default=django.utils.timezone.now, verbose_name='修改时间')),
- ('is_enable', models.BooleanField(default=True, verbose_name='是否显示')),
- ('article', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='blog.article', verbose_name='文章')),
- ('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='作者')),
- ('parent_comment', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='comments.comment', verbose_name='上级评论')),
- ],
- options={
- 'verbose_name': '评论',
- 'verbose_name_plural': '评论',
- 'ordering': ['-id'],
- 'get_latest_by': 'id',
- },
- ),
- ]
diff --git a/src/DjangoBlog-master/DjangoBlog-master/comments/migrations/0002_alter_comment_is_enable.py b/src/DjangoBlog-master/DjangoBlog-master/comments/migrations/0002_alter_comment_is_enable.py
deleted file mode 100644
index 17c44db8..00000000
--- a/src/DjangoBlog-master/DjangoBlog-master/comments/migrations/0002_alter_comment_is_enable.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# Generated by Django 4.1.7 on 2023-04-24 13:48
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
- dependencies = [
- ('comments', '0001_initial'),
- ]
-
- operations = [
- migrations.AlterField(
- model_name='comment',
- name='is_enable',
- field=models.BooleanField(default=False, verbose_name='是否显示'),
- ),
- ]
diff --git a/src/DjangoBlog-master/DjangoBlog-master/comments/migrations/0003_alter_comment_options_remove_comment_created_time_and_more.py b/src/DjangoBlog-master/DjangoBlog-master/comments/migrations/0003_alter_comment_options_remove_comment_created_time_and_more.py
deleted file mode 100644
index a1ca9708..00000000
--- a/src/DjangoBlog-master/DjangoBlog-master/comments/migrations/0003_alter_comment_options_remove_comment_created_time_and_more.py
+++ /dev/null
@@ -1,60 +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
-
-
-class Migration(migrations.Migration):
-
- dependencies = [
- migrations.swappable_dependency(settings.AUTH_USER_MODEL),
- ('blog', '0005_alter_article_options_alter_category_options_and_more'),
- ('comments', '0002_alter_comment_is_enable'),
- ]
-
- operations = [
- migrations.AlterModelOptions(
- name='comment',
- options={'get_latest_by': 'id', 'ordering': ['-id'], 'verbose_name': 'comment', 'verbose_name_plural': 'comment'},
- ),
- migrations.RemoveField(
- model_name='comment',
- name='created_time',
- ),
- migrations.RemoveField(
- model_name='comment',
- name='last_mod_time',
- ),
- migrations.AddField(
- model_name='comment',
- name='creation_time',
- field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='creation time'),
- ),
- migrations.AddField(
- model_name='comment',
- name='last_modify_time',
- field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='last modify time'),
- ),
- migrations.AlterField(
- model_name='comment',
- name='article',
- field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='blog.article', verbose_name='article'),
- ),
- migrations.AlterField(
- model_name='comment',
- name='author',
- field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='author'),
- ),
- migrations.AlterField(
- model_name='comment',
- name='is_enable',
- field=models.BooleanField(default=False, verbose_name='enable'),
- ),
- migrations.AlterField(
- model_name='comment',
- name='parent_comment',
- field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='comments.comment', verbose_name='parent comment'),
- ),
- ]
diff --git a/src/DjangoBlog-master/DjangoBlog-master/comments/models.py b/src/DjangoBlog-master/DjangoBlog-master/comments/models.py
deleted file mode 100644
index 7c3bbc8d..00000000
--- a/src/DjangoBlog-master/DjangoBlog-master/comments/models.py
+++ /dev/null
@@ -1,39 +0,0 @@
-from django.conf import settings
-from django.db import models
-from django.utils.timezone import now
-from django.utils.translation import gettext_lazy as _
-
-from blog.models import Article
-
-
-# Create your models here.
-
-class Comment(models.Model):
- body = models.TextField('正文', max_length=300)
- creation_time = models.DateTimeField(_('creation time'), default=now)
- last_modify_time = models.DateTimeField(_('last modify time'), default=now)
- author = models.ForeignKey(
- settings.AUTH_USER_MODEL,
- verbose_name=_('author'),
- on_delete=models.CASCADE)
- article = models.ForeignKey(
- Article,
- verbose_name=_('article'),
- on_delete=models.CASCADE)
- parent_comment = models.ForeignKey(
- 'self',
- verbose_name=_('parent comment'),
- blank=True,
- null=True,
- on_delete=models.CASCADE)
- is_enable = models.BooleanField(_('enable'),
- default=False, blank=False, null=False)
-
- class Meta:
- ordering = ['-id']
- verbose_name = _('comment')
- verbose_name_plural = verbose_name
- get_latest_by = 'id'
-
- def __str__(self):
- return self.body
diff --git a/src/DjangoBlog-master/DjangoBlog-master/comments/templatetags/comments_tags.py b/src/DjangoBlog-master/DjangoBlog-master/comments/templatetags/comments_tags.py
deleted file mode 100644
index fde02b47..00000000
--- a/src/DjangoBlog-master/DjangoBlog-master/comments/templatetags/comments_tags.py
+++ /dev/null
@@ -1,30 +0,0 @@
-from django import template
-
-register = template.Library()
-
-
-@register.simple_tag
-def parse_commenttree(commentlist, comment):
- """获得当前评论子评论的列表
- 用法: {% parse_commenttree article_comments comment as childcomments %}
- """
- datas = []
-
- def parse(c):
- childs = commentlist.filter(parent_comment=c, is_enable=True)
- for child in childs:
- datas.append(child)
- parse(child)
-
- parse(comment)
- return datas
-
-
-@register.inclusion_tag('comments/tags/comment_item.html')
-def show_comment_item(comment, ischild):
- """评论"""
- depth = 1 if ischild else 2
- return {
- 'comment_item': comment,
- 'depth': depth
- }
diff --git a/src/DjangoBlog-master/DjangoBlog-master/comments/tests.py b/src/DjangoBlog-master/DjangoBlog-master/comments/tests.py
deleted file mode 100644
index 2a7f55f1..00000000
--- a/src/DjangoBlog-master/DjangoBlog-master/comments/tests.py
+++ /dev/null
@@ -1,109 +0,0 @@
-from django.test import Client, RequestFactory, TransactionTestCase
-from django.urls import reverse
-
-from accounts.models import BlogUser
-from blog.models import Category, Article
-from comments.models import Comment
-from comments.templatetags.comments_tags import *
-from djangoblog.utils import get_max_articleid_commentid
-
-
-# Create your tests here.
-
-class CommentsTest(TransactionTestCase):
- def setUp(self):
- self.client = Client()
- self.factory = RequestFactory()
- from blog.models import BlogSettings
- value = BlogSettings()
- value.comment_need_review = True
- value.save()
-
- self.user = BlogUser.objects.create_superuser(
- email="liangliangyy1@gmail.com",
- username="liangliangyy1",
- password="liangliangyy1")
-
- def update_article_comment_status(self, article):
- comments = article.comment_set.all()
- for comment in comments:
- comment.is_enable = True
- comment.save()
-
- def test_validate_comment(self):
- self.client.login(username='liangliangyy1', password='liangliangyy1')
-
- category = Category()
- category.name = "categoryccc"
- category.save()
-
- article = Article()
- article.title = "nicetitleccc"
- article.body = "nicecontentccc"
- article.author = self.user
- article.category = category
- article.type = 'a'
- article.status = 'p'
- article.save()
-
- comment_url = reverse(
- 'comments:postcomment', kwargs={
- 'article_id': article.id})
-
- response = self.client.post(comment_url,
- {
- 'body': '123ffffffffff'
- })
-
- self.assertEqual(response.status_code, 302)
-
- article = Article.objects.get(pk=article.pk)
- self.assertEqual(len(article.comment_list()), 0)
- self.update_article_comment_status(article)
-
- self.assertEqual(len(article.comment_list()), 1)
-
- response = self.client.post(comment_url,
- {
- 'body': '123ffffffffff',
- })
-
- self.assertEqual(response.status_code, 302)
-
- article = Article.objects.get(pk=article.pk)
- self.update_article_comment_status(article)
- self.assertEqual(len(article.comment_list()), 2)
- parent_comment_id = article.comment_list()[0].id
-
- response = self.client.post(comment_url,
- {
- 'body': '''
- # Title1
-
- ```python
- import os
- ```
-
- [url](https://www.lylinux.net/)
-
- [ddd](http://www.baidu.com)
-
-
- ''',
- 'parent_comment_id': parent_comment_id
- })
-
- self.assertEqual(response.status_code, 302)
- self.update_article_comment_status(article)
- article = Article.objects.get(pk=article.pk)
- self.assertEqual(len(article.comment_list()), 3)
- comment = Comment.objects.get(id=parent_comment_id)
- tree = parse_commenttree(article.comment_list(), comment)
- self.assertEqual(len(tree), 1)
- data = show_comment_item(comment, True)
- self.assertIsNotNone(data)
- s = get_max_articleid_commentid()
- self.assertIsNotNone(s)
-
- from comments.utils import send_comment_email
- send_comment_email(comment)
diff --git a/src/DjangoBlog-master/DjangoBlog-master/comments/urls.py b/src/DjangoBlog-master/DjangoBlog-master/comments/urls.py
deleted file mode 100644
index 7df3fab4..00000000
--- a/src/DjangoBlog-master/DjangoBlog-master/comments/urls.py
+++ /dev/null
@@ -1,11 +0,0 @@
-from django.urls import path
-
-from . import views
-
-app_name = "comments"
-urlpatterns = [
- path(
- 'article//postcomment',
- views.CommentPostView.as_view(),
- name='postcomment'),
-]
diff --git a/src/DjangoBlog-master/DjangoBlog-master/comments/utils.py b/src/DjangoBlog-master/DjangoBlog-master/comments/utils.py
deleted file mode 100644
index f01dba7e..00000000
--- a/src/DjangoBlog-master/DjangoBlog-master/comments/utils.py
+++ /dev/null
@@ -1,38 +0,0 @@
-import logging
-
-from django.utils.translation import gettext_lazy as _
-
-from djangoblog.utils import get_current_site
-from djangoblog.utils import send_email
-
-logger = logging.getLogger(__name__)
-
-
-def send_comment_email(comment):
- site = get_current_site().domain
- subject = _('Thanks for your comment')
- article_url = f"https://{site}{comment.article.get_absolute_url()}"
- html_content = _("""Thank you very much for your comments on this site
- You can visit %(article_title)s
- to review your comments,
- Thank you again!
-
- If the link above cannot be opened, please copy this link to your browser.
- %(article_url)s""") % {'article_url': article_url, 'article_title': comment.article.title}
- tomail = comment.author.email
- send_email([tomail], subject, html_content)
- try:
- if comment.parent_comment:
- html_content = _("""Your comment on %(article_title)s
has
- received a reply.
%(comment_body)s
-
- go check it out!
-
- If the link above cannot be opened, please copy this link to your browser.
- %(article_url)s
- """) % {'article_url': article_url, 'article_title': comment.article.title,
- 'comment_body': comment.parent_comment.body}
- tomail = comment.parent_comment.author.email
- send_email([tomail], subject, html_content)
- except Exception as e:
- logger.error(e)
diff --git a/src/DjangoBlog-master/DjangoBlog-master/comments/views.py b/src/DjangoBlog-master/DjangoBlog-master/comments/views.py
deleted file mode 100644
index ad9b2b94..00000000
--- a/src/DjangoBlog-master/DjangoBlog-master/comments/views.py
+++ /dev/null
@@ -1,63 +0,0 @@
-# Create your views here.
-from django.core.exceptions import ValidationError
-from django.http import HttpResponseRedirect
-from django.shortcuts import get_object_or_404
-from django.utils.decorators import method_decorator
-from django.views.decorators.csrf import csrf_protect
-from django.views.generic.edit import FormView
-
-from accounts.models import BlogUser
-from blog.models import Article
-from .forms import CommentForm
-from .models import Comment
-
-
-class CommentPostView(FormView):
- form_class = CommentForm
- template_name = 'blog/article_detail.html'
-
- @method_decorator(csrf_protect)
- def dispatch(self, *args, **kwargs):
- return super(CommentPostView, self).dispatch(*args, **kwargs)
-
- def get(self, request, *args, **kwargs):
- article_id = self.kwargs['article_id']
- article = get_object_or_404(Article, pk=article_id)
- url = article.get_absolute_url()
- return HttpResponseRedirect(url + "#comments")
-
- def form_invalid(self, form):
- article_id = self.kwargs['article_id']
- article = get_object_or_404(Article, pk=article_id)
-
- return self.render_to_response({
- 'form': form,
- 'article': article
- })
-
- def form_valid(self, form):
- """提交的数据验证合法后的逻辑"""
- user = self.request.user
- author = BlogUser.objects.get(pk=user.pk)
- article_id = self.kwargs['article_id']
- article = get_object_or_404(Article, pk=article_id)
-
- if article.comment_status == 'c' or article.status == 'c':
- raise ValidationError("该文章评论已关闭.")
- comment = form.save(False)
- comment.article = article
- from djangoblog.utils import get_blog_setting
- settings = get_blog_setting()
- if not settings.comment_need_review:
- comment.is_enable = True
- comment.author = author
-
- if form.cleaned_data['parent_comment_id']:
- parent_comment = Comment.objects.get(
- pk=form.cleaned_data['parent_comment_id'])
- comment.parent_comment = parent_comment
-
- comment.save(True)
- return HttpResponseRedirect(
- "%s#div-comment-%d" %
- (article.get_absolute_url(), comment.pk))