diff --git a/CHANGES.md b/CHANGES.md index 39c6fea..073d81b 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,5 +1,12 @@ ## 版本更新记录 +### v0.2.8 2020-01-15 + +- 文档页添加上一篇文档和下一篇文档链接; +- 优化文集样式,私密文集会在首页和文集、文档页使用锁图标标识; +- 优化文档搜索页面样式; +- 在Django调试模式下(DEBUG=True)不启用统计代码和广告代码; + ### v0.2.7 2020-01-01 - 添加文件权限控制功能,支持:公开、私密、指定用户可见、访问码可见4中权限模式; diff --git a/MrDoc/settings.py b/MrDoc/settings.py index 8fb7bf9..af6ba29 100644 --- a/MrDoc/settings.py +++ b/MrDoc/settings.py @@ -25,7 +25,7 @@ SECRET_KEY = '5&71mt9@^58zdg*_!t(x6g14q*@84d%ptr%%s6e0l50zs0we3d' # SECURITY WARNING: don't run with debug turned on in production! DEBUG = False -VERSIONS = '0.2.7' +VERSIONS = '0.2.8' ALLOWED_HOSTS = ['*'] diff --git a/README.md b/README.md index 1fd2f2b..8c7cf5b 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ ## 介绍 基于Python的一个简单文档写作系统。 -当前版本为:**v0.2.7**,版本发布时间为**2020-01-01**,更新记录详见:[CHANGES.md](./CHANGES.md) +当前版本为:**v0.2.8**,版本发布时间为**2020-01-15**,更新记录详见:[CHANGES.md](./CHANGES.md) MrDoc拥有以下特点: diff --git a/app_admin/context_processors.py b/app_admin/context_processors.py index 53a548e..dccfff7 100644 --- a/app_admin/context_processors.py +++ b/app_admin/context_processors.py @@ -11,6 +11,8 @@ def sys_setting(request): setting_dict = dict() # 设置网站版本 setting_dict['mrdoc_version'] = settings.VERSIONS + # 设置debug状态 + setting_dict['debug'] = settings.DEBUG # 获取系统设置状态 datas = SysSetting.objects.filter(types="basic") for data in datas: diff --git a/app_admin/decorators.py b/app_admin/decorators.py index 0b50cbd..bb01072 100644 --- a/app_admin/decorators.py +++ b/app_admin/decorators.py @@ -29,3 +29,14 @@ def open_register(function): return function(request, *args, **kwargs) return _inner + +# 请求头验证 +def check_headers(function): + def _inner(request,*args,**kwargs): + metas = request.META + if 'HTTP_COOKIE' not in metas: + raise Http404 + elif 'HTTP_USER_AGENT' not in metas: + raise Http404 + return function(request, *args, **kwargs) + return _inner \ No newline at end of file diff --git a/app_doc/templatetags/doc_filter.py b/app_doc/templatetags/doc_filter.py index 553eee6..c744ebc 100644 --- a/app_doc/templatetags/doc_filter.py +++ b/app_doc/templatetags/doc_filter.py @@ -21,4 +21,98 @@ def get_doc_parent(value): if int(value) != 0: return Doc.objects.get(id=int(value)) else: - return '无上级文档' \ No newline at end of file + return '无上级文档' + +# 获取文档的下一篇文档 +@register.filter(name='get_doc_next') +def get_doc_next(value): + try: + doc_id = value + doc = Doc.objects.get(id=int(doc_id)) # 当前文档 + docs = Doc.objects.filter(parent_doc=doc.parent_doc, top_doc=doc.top_doc, status=1).order_by('sort') # 同级所有文档 + docs_list = [d.id for d in docs] + + subdoc = Doc.objects.filter(parent_doc=doc.id,top_doc=doc.top_doc, status=1) # 获取当前文档的所有子级文档 + + # 没有下级文档 + if subdoc.count() == 0: + # 如果文档为同级最后一个文档,则没有下一篇文档 + if docs_list.index(doc.id) == len(docs_list) - 1: + try: + parentdoc = Doc.objects.get(id=doc.parent_doc) # 获取当前文档的上级文档 + parents = Doc.objects.filter(parent_doc=parentdoc.parent_doc, top_doc=doc.top_doc, status=1).order_by('sort') # 获取上级文档的所有同级文档 + parent_list = [d.id for d in parents] + except: + return None + if parent_list.index(parentdoc.id) == len(parent_list) - 1: + # 获取上级文档的上一级文档 + try: + parentdoc2 = Doc.objects.get(id=parentdoc.parent_doc) + parents2 = Doc.objects.filter(parent_doc = parentdoc2.parent_doc,top_doc=parentdoc.top_doc,status=1).order_by('sort') + parent_list2 = [d.id for d in parents2] + except: + return None + if parent_list2.index(parentdoc2.id) == len(parent_list2) - 1: + next_doc = None + return next_doc + else: + next_id = parent_list2[parent_list2.index(parentdoc2.id) + 1] + return next_id + else: + next_id = parent_list[parent_list.index(parentdoc.id) + 1] + return next_id + else: + next_id = docs_list[docs_list.index(doc.id) + 1] + next_doc = Doc.objects.get(id=next_id) + # print("下一篇:", next_doc.id, next_doc) + return next_doc.id + # 存在下级文档 + else: + # 下一篇文档为下级第一篇文档 + next_doc = subdoc.order_by('sort')[0] + # print("下一篇:", next_doc.id, next_doc) + return next_doc.id + except Exception as e: + import traceback + print(traceback.print_exc()) + +# 获取文档的上一篇文档 +@register.filter(name='get_doc_previous') +def get_doc_previous(value): + try: + doc_id = value + doc = Doc.objects.get(id=int(doc_id)) # 当前文档 + docs = Doc.objects.filter(parent_doc=doc.parent_doc,top_doc=doc.top_doc,status=1).order_by('sort') # 同级所有文档 + docs_list = [d.id for d in docs] + # 文档为同级中的第一个, + if docs_list.index(doc.id) == 0: + # 如果其为顶级文档,那么没有上一篇文档, + if doc.parent_doc == 0: + # print("无上一篇文档") + previous = None + return previous + # 如果其为次级文档,那么其上一篇文档为上级文档 + else: + previous = Doc.objects.get(id=doc.parent_doc) # 获取 + # print("上一篇:", previous.id, previous) + return previous.id + # 文档为同级中的非第一个,那么上一篇为索引号的前一个文档 + else: + previou_id = docs_list[docs_list.index(doc.id) - 1] # 获取前一个文档的ID + previous = Doc.objects.get(id=previou_id) # 获取前一个文档 + # 查询以此文档为上级的文档 + previous_subdoc = Doc.objects.filter(parent_doc=previous.id,top_doc=doc.top_doc,status=1).order_by('-sort') + # 如果没有文档以此文档为上级文档,那么为上一篇文档 + if previous_subdoc.count() == 0: + return previou_id + else:# 否则,上一篇文档为以此文档作为上级文档的文档里面的最后一篇文档 + previous = previous_subdoc[:1][0] + parent_list = Doc.objects.filter(parent_doc=previous.id,top_doc=doc.top_doc,status=1).order_by('-sort') + if parent_list.count() == 0: + return previous.id + else: + previous = parent_list[:1][0] + return previous.id + except Exception as e: + import traceback + print(traceback.print_exc()) \ No newline at end of file diff --git a/app_doc/views.py b/app_doc/views.py index e2b7419..e460534 100644 --- a/app_doc/views.py +++ b/app_doc/views.py @@ -11,6 +11,7 @@ from django.db.models import Q import datetime import traceback from app_doc.report_utils import * +from app_admin.decorators import check_headers # 文集列表 @@ -53,6 +54,7 @@ def create_project(request): # 文集页 @require_http_methods(['GET']) +@check_headers def project_index(request,pro_id): # 获取文集 try: diff --git a/static/mrdoc.css b/static/mrdoc.css index 86d81e4..3396f80 100644 --- a/static/mrdoc.css +++ b/static/mrdoc.css @@ -223,7 +223,7 @@ body, html { background: #fff; border-bottom: 1px solid rgba(0,0,0,.07); border-top: 1px solid rgba(0,0,0,.07); - /*margin-bottom: 10px;*/ + border-radius:9px; margin-top: -1px; } .doc-summary ul.summary { diff --git a/template/app_admin/admin_setting.html b/template/app_admin/admin_setting.html index cd638cc..7b9684d 100644 --- a/template/app_admin/admin_setting.html +++ b/template/app_admin/admin_setting.html @@ -40,7 +40,7 @@