# coding:utf-8
from django.shortcuts import render,redirect
from django.http.response import JsonResponse,Http404,HttpResponseNotAllowed,HttpResponse
from django.http import QueryDict
from django.http import HttpResponseForbidden
from django.contrib.auth.decorators import login_required # 登录需求装饰器
from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_http_methods,require_GET,require_POST # 视图请求方法装饰器
from django.core.paginator import Paginator,PageNotAnInteger,EmptyPage,InvalidPage # 后端分页
from django.core.exceptions import PermissionDenied,ObjectDoesNotExist
from django.core.serializers import serialize
from app_doc.models import Project,Doc,DocTemp
from django.contrib.auth.models import User
from rest_framework.views import APIView # 视图
from rest_framework.response import Response # 响应
from rest_framework.pagination import PageNumberPagination # 分页
from rest_framework.authentication import SessionAuthentication # 认证
from django.db.models import Q
from django.db import transaction
from django.utils.html import strip_tags
from django.utils.translation import gettext_lazy as _
from loguru import logger
from app_api.serializers_app import *
from app_doc.report_utils import *
from app_admin.models import UserOptions,SysSetting
from app_admin.decorators import check_headers,allow_report_file
from app_api.auth_app import AppAuth,AppMustAuth # 自定义认证
import datetime
import traceback
import re
import json
import random
import os.path
import base64
import hashlib
import markdown
# HTML转义
def jsonXssFilter(data):
payloads = {
'\'':''',
'"':'"',
'<':'<',
'>':'>'
}
if type(data) == dict:
new = {}
for key,values in data.items():
new[key] = jsonXssFilter(values)
elif type(data) == list:
new = []
for i in data:
new.append(jsonXssFilter(i))
elif type(data) == int or type(data) == float:
new = data
elif type(data) == str:
new = data
for key,value in payloads.items():
new = new.replace(key,value)
elif type(data) ==bytes:
new = data
else:
# print('>>> unknown type:')
# print(type(data))
new = data
return new
def html_filter(data):
if len(data) == 0:
return ""
payloads = {
'\'':''',
'"':'"',
'<':'<',
'>':'>'
}
new = data
for key, value in payloads.items():
new = new.replace(key, value)
print(new)
return new
# 替换前端传来的非法字符
def validateTitle(title):
rstr = r"[\/\\\:\*\?\"\<\>\|\[\]]" # '/ \ : * ? " < > |'
new_title = re.sub(rstr, "_", title) # 替换为下划线
return new_title
# 文档文本生成摘要(不带markdown标记和html标签)
def remove_markdown_tag(docs):
for doc in docs:
try:
if doc.editor_mode == 3: # 富文本文档
doc.content = strip_tags(doc.content)[:201]
elif doc.editor_mode == 4:
doc.pre_content = "此为表格文档,进入文档查看详细内容"
else: # 其他文档
doc.pre_content = strip_tags(markdown.markdown(doc.pre_content))[:201]
except Exception as e:
doc.pre_content = doc.pre_content[:201]
# 获取文集的文档目录
def get_pro_toc(pro_id):
# try:
# project = Project.objects.get(id=pro_id)
# pro_toc = ProjectToc.objects.get(project=project)
# doc_list = json.loads(pro_toc.value)
# print("使用缓存")
# except:
# print("重新生成")
# 查询存在上级文档的文档
parent_id_list = Doc.objects.filter(
top_doc=pro_id,
status=1
).exclude(parent_doc=0).values_list('parent_doc',flat=True)
# 获取存在上级文档的上级文档ID
# print(parent_id_list)
doc_list = []
n = 0
# 获取一级文档
top_docs = Doc.objects.filter(top_doc=pro_id, parent_doc=0, status=1).values('id', 'name','open_children','editor_mode').order_by('sort')
# 遍历一级文档
for doc in top_docs:
top_item = {
'id': doc['id'],
'name': doc['name'],
'open_children':doc['open_children'],
'editor_mode':doc['editor_mode']
# 'spread': True,
# 'level': 1
}
# 如果一级文档存在下级文档,查询其二级文档
if doc['id'] in parent_id_list:
# 获取二级文档
sec_docs = Doc.objects.filter(
top_doc=pro_id,
parent_doc=doc['id'],
status=1
).values('id', 'name','open_children','editor_mode').order_by('sort')
top_item['children'] = []
for doc in sec_docs:
sec_item = {
'id': doc['id'],
'name': doc['name'],
'open_children': doc['open_children'],
'editor_mode': doc['editor_mode']
# 'level': 2
}
# 如果二级文档存在下级文档,查询第三级文档
if doc['id'] in parent_id_list:
# 获取三级文档
thr_docs = Doc.objects.filter(
top_doc=pro_id,
parent_doc=doc['id'],
status=1
).values('id','name','editor_mode').order_by('sort')
sec_item['children'] = []
for doc in thr_docs:
item = {
'id': doc['id'],
'name': doc['name'],
'editor_mode': doc['editor_mode']
# 'level': 3
}
sec_item['children'].append(item)
n += 1
top_item['children'].append(sec_item)
n += 1
else:
top_item['children'].append(sec_item)
n += 1
doc_list.append(top_item)
n += 1
# 如果一级文档没有下级文档,直接保存
else:
doc_list.append(top_item)
n += 1
# 将文集的大纲目录写入数据库
# ProjectToc.objects.create(
# project = project,
# value = json.dumps(doc_list)
# )
# print(doc_list,n)
# if n > 999:
# return ([],n)
# else:
return (doc_list,n)
# 文集列表(首页)
@logger.catch()
def project_list(request):
kw = request.GET.get('kw','') # 搜索词
sort = request.GET.get('sort','') # 排序,0表示按时间升序排序,1表示按时间降序排序,''表示按后台配置排序,默认为''
role = request.GET.get('role',-1) # 筛选文集权限,默认为显示所有可显示的文集
# 是否排序
if sort in [0,'0']:
sort_str = ''
elif sort == '':
try:
index_project_sort = SysSetting.objects.get(name='index_project_sort')
if index_project_sort.value == '-1':
sort_str = '-'
else:
sort_str = ''
except:
sort_str = ''
else:
sort_str = '-'
# 是否搜索
if kw == '':
is_kw = False
else:
is_kw = True
# 是否认证
if request.user.is_authenticated:
is_auth = True
else:
is_auth = False
# 是否筛选
if role in ['',-1,'-1']:
is_role = False
role_list = [0,3]
else:
is_role = True
# 没有搜索 and 认证用户 and 没有筛选
if (is_kw is False) and (is_auth) and (is_role is False):
colla_list = [i.project.id for i in ProjectCollaborator.objects.filter(user=request.user)] # 用户的协作文集列表
没有合适的资源?快使用搜索试试~ 我知道了~
基于Python开发的在线文档系统.zip
共1905个文件
js:755个
css:283个
html:264个
3 下载量 103 浏览量
2023-08-30
16:24:55
上传
评论 1
收藏 23.29MB ZIP 举报
温馨提示
在线文档系统是基于Python进行开发的,支持「Markdown」和「富文本」类型的文本文档和在线表格文档,适合作为个人和小型团队的文档、笔记和知识管理工具。在线文档系统功能特性:1、站点管理用户注册、用户登录、用户管理、注册邀请
资源推荐
资源详情
资源评论
收起资源包目录
基于Python开发的在线文档系统.zip (1905个子文件)
AUTHORS 12KB
luckysheet.css 141KB
layui.css 78KB
layui.css 78KB
editormd.css 77KB
skin.css 71KB
skin.css 71KB
plugins.css 66KB
skin.min.css 61KB
skin.css 61KB
editormd.min.css 60KB
skin.min.css 60KB
skin.min.css 59KB
editormd.preview.css 56KB
skin.min1.css 51KB
skin.min.css 51KB
editormd.preview.min.css 44KB
index.css 42KB
font-awesome.min.css 30KB
pluginsCss.css 28KB
ambiance.css 26KB
loading.css 25KB
loading.css 25KB
katex.css 25KB
skin.mobile.css 24KB
skin.mobile.css 24KB
skin.mobile.css 24KB
skin.mobile.css 24KB
content.css 24KB
content.inline.css 23KB
content.inline.css 23KB
content.css 23KB
iconfont.css 22KB
katex.min.css 22KB
katex.min.css 22KB
content.min.css 21KB
content.inline.min.css 21KB
content.inline.min.css 21KB
mrdoc.css 21KB
content.min.css 21KB
iconfont.css 21KB
skin.mobile.min.css 21KB
skin.mobile.min.css 21KB
skin.mobile.min.css 21KB
skin.mobile.min.css 21KB
content.inline.css 20KB
content.inline.css 20KB
select.css 19KB
select.css 19KB
content.css 19KB
iconfont.css 19KB
content.css 19KB
content.inline.min.css 18KB
content.inline.min.css 18KB
content.min.css 18KB
content.min.css 17KB
layer.css 14KB
layer.css 14KB
mrdoc-admin.css 12KB
layout.css 11KB
layout.css 11KB
layui.mobile.css 10KB
viewer.css 9KB
codemirror.css 9KB
codemirror.css 9KB
tango.css 8KB
demo.css 8KB
demo.css 8KB
icon.css 8KB
viewer.min.css 8KB
colorful.css 8KB
pastie.css 8KB
ant-design.css 7KB
notice.css 7KB
notice.css 7KB
solarized-light.css 7KB
github.css 7KB
laydate.css 7KB
laydate.css 7KB
murphy.css 7KB
friendly.css 7KB
admin.css 7KB
rainbow_dash.css 7KB
emacs.css 7KB
manni.css 7KB
monokailight.css 7KB
native.css 7KB
lovelace.css 7KB
pygments.css 7KB
trac.css 7KB
perldoc.css 6KB
autumn.css 6KB
xcode.css 6KB
abap.css 6KB
arduino.css 6KB
solarized-dark256.css 6KB
paraiso-light.css 6KB
paraiso-dark.css 6KB
borland.css 6KB
dracula.css 6KB
共 1905 条
- 1
- 2
- 3
- 4
- 5
- 6
- 20
资源评论
财云量化
- 粉丝: 4445
- 资源: 171
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C183579-123578-c1235789.jpg
- Qt5.14 绘画板 Qt Creator C++项目
- python实现Excel表格合并
- Java实现读取Excel批量发送邮件.zip
- 【java毕业设计】商城后台管理系统源码(springboot+vue+mysql+说明文档).zip
- 【java毕业设计】开发停车位管理系统(调用百度地图API)源码(springboot+vue+mysql+说明文档).zip
- 星耀软件库(升级版).apk.1
- 基于Django后端和Vue前端的多语言购物车项目设计源码
- 基于Python与Vue的浮光在线教育平台源码设计
- 31129647070291Eclipson MXS R.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功