django之百度Ueditor富文本编辑器后台集成
Python3 + Django2.0 百度Ueditor 富文本编辑器的集成
百度富文本编辑器官网地址:http://fex.baidu.com/ueditor/
疑问:为什么要二次集成?
答案:因为百度富文本编辑器Ueditor没有对python的支持
步骤1:
在官网下载Ueditor的任意版本代码:http://ueditor.baidu.com/website/download.html#ueditor
步骤2:
将下载的代码放入到 django 项目中
步骤3:前端引用
在前端HTML代码中引用富文本编辑器【注意:此时因为还没有实例化富文本编辑器,所以暂时无效果!!!】
<!-- 引用对应的js文件 -->
<script type="text/javascript" charset="utf-8"
src="{% static 'xxx/xxx/ueditor.config.js' %}"></script>
<script type="text/javascript" charset="utf-8"
src="{% static 'xxx/xxx/ueditor.all.min.js' %}"></script> <!-- 富文本编辑器 --> <div>
<script id="uedit" type="text/plain></script>
</div>
步骤6:js代码
在前端引用之后,使用js实例化Ueditor,并且配置一些参数:
// 富文本编辑器处理方法
News.prototype.listenEditor = function () {
// 实例化一个富文本编辑器
window.ue = UE.getEditor('editor', {
'initialFrameHeight': 400,//设置富文本编辑器的高度
//'serverUrl': '/ueditor/upload/', //设置文件上传的视图函数(服务器路径)
/*
* initialFrameWidth:"100%":设置富文本 编辑器自适应宽度
* 也可以在:ueditor.config.js中修改initialFrameWidth 达到同样的目的
*/
initialFrameWidth:"100%"
});
};
步骤6:军事机密,django + python服务端的集成处理(直接复制就可以用了)
1> views.py 中逻辑代码,还需要在settings进行对应的配置
# encoding: utf-8 """
百度富文本编辑器python版本服务端集成代码
""" import json
import re
import string
import time
import hashlib
import random
import base64
import sys
import os
from urllib import parse
# from django.conf import settings
from django.conf import settings
from django.http import JsonResponse
from django.shortcuts import reverse
from django.views.decorators.csrf import csrf_exempt
from django.http import FileResponse
from django.views.generic import View
from django.utils.decorators import method_decorator
from django.views.decorators.http import require_http_methods # 更改工作目录。这么做的目的是七牛qiniu的sdk
# 在设置缓存路径的时候默认会设置到C:/Windows/System32下面
# 会造成没有权限创建。
# os.chdir(os.path.dirname(__file__)) # 这个在我的项目中设置后,服务器启动回报:manage.py 文件不存在,注释后一切正常
try:
import qiniu
except:
raise RuntimeError("3333333333")
# pass
from io import BytesIO # 七牛相关配置
UEDITOR_QINIU_ACCESS_KEY = ""
UEDITOR_QINIU_SECRET_KEY = ""
UEDITOR_QINIU_BUCKET_NAME = ""
UEDITOR_QINIU_DOMAIN = "" # ueditor 富文本编辑器的 config.json 配置文件路径
UEDITOR_CONFIG_PATH = ""
# 配置文件上传路径
UEDITOR_UPLOAD_PATH = ""
# 是否要将文件上传到七牛
UEDITOR_UPLOAD_TO_QINIU = False
# 是否要将文件上传到自己的服务器
UEDITOR_UPLOAD_TO_SERVER = False # 用来判断是否要将文件上传到自己的服务器
try:
UEDITOR_UPLOAD_TO_SERVER = settings.UEDITOR_UPLOAD_TO_SERVER
if UEDITOR_UPLOAD_TO_SERVER:
UEDITOR_UPLOAD_PATH = settings.UEDITOR_UPLOAD_PATH
if not os.path.exists(UEDITOR_UPLOAD_PATH):
os.mkdir(UEDITOR_UPLOAD_PATH)
except Exception as e:
os.chdir(os.path.join('..', '..', os.path.dirname(__file__)))
raise RuntimeError("123"+os.getcwd())
# pass # 用来判断是否要将文件上传到七牛
try:
UEDITOR_UPLOAD_TO_QINIU = settings.UEDITOR_UPLOAD_TO_QINIU
except:
raise RuntimeError("1111111111111111")
# pass # 如果既没有配置上传到本地,又没有配置上传到七牛,那么就抛出异常
if not UEDITOR_UPLOAD_PATH and not UEDITOR_UPLOAD_TO_QINIU:
raise RuntimeError("UEditor的UEDITOR_UPLOAD_TO_SERVER或者UEDITOR_UPLOAD_TO_QINIU必须配置一项!") # 判断是否配置了config.json文件的路径
try:
UEDITOR_CONFIG_PATH = settings.UEDITOR_CONFIG_PATH
except:
raise RuntimeError("请配置UEditor的配置文件的路径!") # 如果配置了七牛的配置信息
if UEDITOR_UPLOAD_TO_QINIU:
try:
UEDITOR_QINIU_ACCESS_KEY = settings.UEDITOR_QINIU_ACCESS_KEY
UEDITOR_QINIU_SECRET_KEY = settings.UEDITOR_QINIU_SECRET_KEY
UEDITOR_QINIU_BUCKET_NAME = settings.UEDITOR_QINIU_BUCKET_NAME
UEDITOR_QINIU_DOMAIN = settings.UEDITOR_QINIU_DOMAIN
except Exception as e:
option = e.args[0]
raise RuntimeError('请在app.config中配置%s!' % option)
#
# @method_decorator(decorator,name=''):将函数装饰器转换为类装饰器
# @csrf_exempt:csrftoken装饰器
# @require_http_methods(['GET','POST']):请求装饰器,只允许 get 、 post 请求
#
@method_decorator([csrf_exempt, require_http_methods(['GET', 'POST'])], name='dispatch')
class UploadView(View):
# 构造函数
def __init__(self):
super(UploadView, self).__init__() def _random_filename(self, rawfilename):
"""
随机的文件名,保证文件名称不会冲突
"""
letters = string.ascii_letters
random_filename = str(time.time()) + "".join(random.sample(letters, 5))
filename = hashlib.md5(random_filename.encode('utf-8')).hexdigest()
subffix = os.path.splitext(rawfilename)[-1]
return filename + subffix def _json_result(self, state='', url='', title='', original=''):
"""
返回指定格式的json数据的
"""
result = {
'state': state,
'url': url,
'title': title,
'original': original
}
return JsonResponse(result) def _upload_to_qiniu(self, upfile, filename):
"""
上传文件到七牛
"""
if not sys.modules.get('qiniu'):
raise RuntimeError('没有导入qiniu模块!')
q = qiniu.Auth(UEDITOR_QINIU_ACCESS_KEY, UEDITOR_QINIU_SECRET_KEY)
token = q.upload_token(UEDITOR_QINIU_BUCKET_NAME)
buffer = BytesIO()
for chunk in upfile.chunks():
buffer.write(chunk)
buffer.seek(0)
ret, info = qiniu.put_data(token, filename, buffer.read())
if info.ok:
url = parse.urljoin(UEDITOR_QINIU_DOMAIN, ret['key'])
return 'SUCCESS', url, ret['key'], ret['key']
else:
return 'FAIL', None, None, None def _upload_to_server(self, upfile, filename):
"""
上传文件到自己的服务器
"""
with open(os.path.join(UEDITOR_UPLOAD_PATH, filename), 'wb') as fp:
for chunk in upfile.chunks():
fp.write(chunk)
url = reverse("ueditor:send_file", kwargs={"filename": filename})
return 'SUCCESS', url, filename, filename def _action_config(self):
"""
处理configl类型的响应
将配置文件以 json 格式返回给前端
"""
config_path = UEDITOR_CONFIG_PATH
with open(config_path, 'r', encoding='utf-8') as fp:
result = json.loads(re.sub(r'\/\*.*\*\/', '', fp.read()))
return JsonResponse(result) def _action_upload(self, request):
"""
处理文件(图片,视频,普通文件)上传
"""
upfile = request.FILES.get("upfile")
filename = self._random_filename(upfile.name) qiniu_result = None
server_result = None if UEDITOR_UPLOAD_TO_QINIU:
qiniu_result = self._upload_to_qiniu(upfile, filename) if UEDITOR_UPLOAD_TO_SERVER:
server_result = self._upload_to_server(upfile, filename) if qiniu_result and qiniu_result[0] == 'SUCCESS':
return self._json_result(*qiniu_result)
elif server_result and server_result[0] == 'SUCCESS':
return self._json_result(*server_result)
else:
return self._json_result() def _action_scrawl(self, request):
base64data = request.form.get("upfile")
img = base64.b64decode(base64data)
filename = self._random_filename('xx.png')
with open(os.path.join(UEDITOR_UPLOAD_PATH, filename), 'wb') as fp:
fp.write(img)
url = reverse('ueditor:send_file', kwargs={"filename": filename})
return self._json_result('SUCCESS', url, filename, filename) # 类视图入口函数
# 当请求该类视图时,会优先执行此函数
# activate:文件类型
def dispatch(self, request, *args, **kwargs):
super(UploadView, self).dispatch(request, *args, **kwargs)
action = request.GET.get('action')
if action == 'config':
return self._action_config()
elif action in ['uploadimage', 'uploadvideo', 'uploadfile']:
return self._action_upload(request)
elif action == 'uploadscrawl':
return self._action_scrawl(request)
else:
return self._json_result() def send_file(request, filename):
fp = open(os.path.join(UEDITOR_UPLOAD_PATH, filename), 'rb')
response = FileResponse(fp)
response['Content-Type'] = "application/octet-stream"
return response
2> settings.py 中的配置
# """
# 百度UEditor富文本编辑配置
# """
# 是否要将文件上传到七牛(必须)
UEDITOR_UPLOAD_TO_QINIU = True
# 是否要将文件上传到自己的服务器(必须)
UEDITOR_UPLOAD_TO_SERVER = False # 七牛相关配置(UEDITOR_UPLOAD_TO_QINIU:True:则必须进行配置,否则无须配置)
UEDITOR_QINIU_ACCESS_KEY = "自己的ACCESS_KEY"
UEDITOR_QINIU_SECRET_KEY = "自己的SECRET_KEY "
UEDITOR_QINIU_BUCKET_NAME = "对象存储空间名称"
# 域名 http://域名/
UEDITOR_QINIU_DOMAIN = "http://域名/" # config.json 配置文件路径
# php版本的Ueditor config.json 路径为:ueditor\utf8-php\php\config.json
UEDITOR_CONFIG_PATH = os.path.join(BASE_DIR, 'front', 'dist', 'ueditor', 'utf8-php', 'php', 'config.json') # 配置文件上传路径(UEDITOR_UPLOAD_TO_SERVER:True:则必须进行配置,否则无须配置)
# UEDITOR_UPLOAD_PATH = MEDIA_ROOT
django之百度Ueditor富文本编辑器后台集成的更多相关文章
- 百度ueditor富文本编辑器的使用
百度ueditor富文本编辑器的使用 //以下为我在官网下载的ueditor v1.3.5 php版的大楷配置步骤第一步: //配置文件的引入应该比功能文件先引入,最后设置语言类型.即:editor. ...
- ASP.NET MVC5 中百度ueditor富文本编辑器的使用
随着网站信息发布内容越来越多,越来越重视美观,富文本编辑就是不可缺少的了,众多编辑器比较后我选了百度的ueditor富文本编辑器. 百度ueditor富文本编辑器分为两种一种是完全版的ueditor, ...
- PHP如何搭建百度Ueditor富文本编辑器
本文为大家分享了PHP搭建百度Ueditor富文本编辑器的方法,供大家参考,具体内容如下 下载UEditor 官网:下载地址 将下载好的文件解压到thinkphp项目中,本文是解压到PUBLIC目录下 ...
- vue集成百度UEditor富文本编辑器
在前端开发的项目中.难免会遇到需要在页面上集成一个富文本编辑器.那么.如果你有这个需求.希望可以帮助到你 vue是前端开发者所追捧的框架,简单易上手,但是基于vue的富文本编辑器大多数太过于精简.于是 ...
- 百度UEditor(富文本编辑器)的基础用法
百度的这个编辑器挺强大的,这里只是用他的文本功能,没有介绍上传图片视频的. 我用是的SSH来写的项目. 1. 把下载的UEditor(ueditor1_4_3_1-utf8-jsp)解压后全部复制到W ...
- 百度UEditor富文本编辑器去除过滤div等标签
将设计排版好的页面html代码上传到数据库,再读取出来的时候发现所有的div都被替换成了p标签. 解决方法: 首先在ueditor.all.js文件内搜索allowDivTransToP,找到如下的代 ...
- 百度UEditor富文本编辑器去除自动追加p标签
本篇文章还原了我在遇到这个问题时的解决过程: 找到ueditor.all.js文件,搜索 me.addInputRule(function(root){ 或者直接搜索 //进入编辑器的li要套p标签 ...
- vue2.x结合百度UEditor富文本编辑器
1.首先下载UEditor源码(https://ueditor.baidu.com/website/),将整个文件放到static文件夹中 2.在src/components文件夹下创建公共组件UEd ...
- 百度Ueditor富文本编辑器 .net版本 任意文件上传执行漏掉修复
问题描述: 借由上传网络图片功能中可传递可执行文件.后台代码中只做了文件类型的检测未能正确的拦截掉非法文件. 只需将上传地址改为 XXXXXX.jpg?.aspx最终服务上最终存储的文件会变为XXXX ...
随机推荐
- 【LeetCode】647. Palindromic Substrings 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 方法一:暴力循环 方法二:固定起点向后找 方法三:动 ...
- 【LeetCode】553. Optimal Division 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...
- python学习第二天:命令行模式和python交互模式
命令行模式 安装完python开发环境和工具之后,在Windows开始菜单选择"命令提示符",就会进入到命令行模式: 或者都可以,然后 点击enter键,弹出下图中的窗口,即命令行 ...
- ZOJ 3870:Team Formation(位运算&思维)
Team Formation Time Limit: 2 Seconds Memory Limit: 131072 KB For an upcoming programming contest, Ed ...
- Max-Mahalanobis Linear Discriminant Analysis Networks
目录 概 主要内容 Pang T, Du C, Zhu J, et al. Max-Mahalanobis Linear Discriminant Analysis Networks[C]. inte ...
- MQ消费失败,自动重试思路
在遇到与第三方系统做对接时,MQ无疑是非常好的解决方案(解耦.异步).但是如果引入MQ组件,随之要考虑的问题就变多了,如何保证MQ消息能够正常被业务消费.所以引入MQ消费失败情况下,自动重试功能是非常 ...
- Spring企业级程序设计作业目录(作业笔记)
Spring企业级程序设计 • [目录] 第1章 Spring之旅 >>> 1.1.6 使用Eclipse搭建的Spring开发环境,使用set注入方式为Bean对象注入属性值并打 ...
- 4.1.4 统计“锦途网”旅游线路平均价格,并采用尽可能多的方式将该价格赋给用户会话变量 @avg_short_price,并输出该变量
查看本章节 查看作业目录 需求说明: 统计"锦途网"旅游线路平均价格,并采用尽可能多的方式将该价格赋给用户会话变量 @avg_short_price,并输出该变量 在 MySQL ...
- SpringBoot 之 配置文件、yaml语法、配置注入、松散绑定
配置文件 SpringBoot 有两种配置文件格式,二选一即可,官方推荐 yaml: application.properties key=value的格式 application.yaml key: ...
- angularJS中$digest already in progress报错解决方法
看到一个前端群里有人问,就查了下解决"$digest already in progress"最好的方式,就是不要使用$scope.$apply()或者$scope.$digest ...