django下的ckeditor 5.0 文本编辑器上传功能。

完整的后台界面怎么可以没有文本编辑器,但是django的admin界面很疑惑,没有自带文本编辑器,好在网上有不少成型的库可以用

我用的是ckeditor编辑器,安装和配置我引用别人的博客

这篇博客配置讲的很详细,之后就可以用RichTextField来定义模型,后台默认就是文本编辑器。

但是问题来了,文本编辑器是没有上传图片的功能,只能贴链接。

网上以前有两篇博客也是讲上传的,一篇是java web,一篇是django的

django的链接在这里 django下ckeditor上传图片的实现

javaweb的链接在这里 CKEditor实现图片上传

建议先看完这两篇,我在看django这一篇的时候就发现,django这篇博客里面的步骤一如下:

步骤1:

下载ckeditor,找到image.js这个文件,搜索“upload”可以找到这一段id:‘Upload‘,hidden:true。实际上上传功能被隐藏了,把上面的true改成false,再打开编辑器,就能找到上传功能了。

最新5.02版本似乎搜索不到,我直接参考java web这一篇

原文:第一种:还是刚才那个image.js
搜索“upload”可以找到这一段 id:‘Upload‘,hidden:true,而我使用的4.3的是

id:"Upload",hidden:!0,反正改为false就行了,(遗憾的是此种方法对我这个版本不起作用)

第二种:打开config.js文件,加入下面一句话

config.filebrowserImageUploadUrl= "admin/UserArticleFileUpload.do"; //待会要上传的action或servlet

这篇文章还讲了怎么去掉图片预览框里面的一堆英文,可以参考一下,我用上文的第二种方法,原因是第一种方法搜索文件里面的时候不存在,不过不用担心,第二种方法妥妥的,先

看下我自己修改后的,config.js文件吧

/**
 * Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
 * For licensing, see LICENSE.md or http://ckeditor.com/license
 */

CKEDITOR.editorConfig = function( config ) {
    // Define changes to default configuration here. For example:
    // config.language = ‘fr‘;
    // config.uiColor = ‘#AADC6E‘;
    config.image_previewText=‘ ‘;
    config.filebrowserImageUploadUrl= "/uploadimg/";

};

什么意思,我讲一下,第二个和java的不一样,原因是我在后台测试上传的时候报错,因为他是提交到这个url(服务器+端口+“/uploadimg/”)的,所以我就在django里面url对应的视图写下如下url:

from django.conf.urls import include, url
from django.contrib import admin
from sjjgWeb.views import *
from mySjjg.settings import BASE_DIR
urlpatterns = [
    url(r‘^ckeditor‘,include(‘ckeditor_uploader.urls‘)),
    url(r‘^admin/‘, include(admin.site.urls)),
    url(r‘^$‘,index),
    url(r‘^index$‘,index,name=‘homepage‘),
    url(r‘^login$‘,login),
    url(r‘^reg$‘,register),
    url(r‘^test$‘,test),
    url(r‘index/(?P<root>\d)/(?P<node>\d)‘,information,name=‘information‘),
    url(r‘^uploadimg/‘,upload_image),  #重点看这个,别的不用看    <<<——————————<<<看这里

    url(r‘^upload/(?P<path>(\S)*)‘,‘django.views.static.serve‘,{‘document_root‘:BASE_DIR+‘\upload‘}),
]

也就是说我的config.js里面写的是对应的url,这样的话你们就可以取自己喜欢的名字,然后视图函数upload_image参考了一下django-ckeditor那篇文章的步骤三的那一段代码

我做了小小的修改,粗略的看了一下,成功后就没有再去看过,有什么问题欢迎提出。

import time

@csrf_protect
def upload_image(request):
    if request.method == ‘POST‘:
        callback = request.GET.get(‘CKEditorFuncNum‘)
        try:
            path = "upload/" + time.strftime("%Y%m%d%H%M%S",time.localtime())   <---还有这里,这里path修改你要上传的路径,我记得我是修改了的,这样就上传到了upload文件夹
            f = request.FILES["upload"]
            file_name = path + "_" + f.name
            des_origin_f = open(file_name, "wb+")
            for chunk in f:                 <--#我修改的是这里,因为python后期的版本放弃了chunk函数,直接遍历类文件类型就可以生成迭代器了。
                des_origin_f.write(chunk)
            des_origin_f.close()
        except Exception, e:
            print e
        res = r"<script>window.parent.CKEDITOR.tools.callFunction("+callback+",‘/"+file_name+"‘, ‘‘);</script>"
        return HttpResponse(res)
    else:
        raise Http404()

注意import time和Http404,原文是没有提到的。具体自己看看,反正这段代码不难。

做到这里以后,我测试的时候,最新版本上传图片的时候,那里失败后有个height很矮的框框,根本不知道里面是什么,我直接用鼠标进去,全部复制黏贴下来,在文本文件里查看

发现是csrf,也就是django那篇博客说的步骤4吧,其实在步骤三的时候,也是我复制黏贴看错误,发现路径以后测试的。最重要是那篇博客后面有步骤五没提到

csrf有经验的都知道,ajax提交的话就要用的一段官方代码,django那篇博客讲的还是挺清楚的,我这里附上我修改后的文件截图

学过jquery都知道,在(function(){    这里面最前面加就行了。                  })

然后是表单,按照原文搜索得到了

我添加后是这一串,自己慢慢看

‘<form enctype="multipart/form-data" method="POST" dir="‘+k+‘" lang="‘+l+‘" action="‘,CKEDITOR.tools.htmlEncode(d.action),‘"><input type="hidden" name="csrfmiddlewaretoken" value="‘+getCookie("csrftoken")+‘">

之后就ok了,然而上传时成功了,但是图片预览不到,哈哈,因为django的url访问方式你也是知道的,并不是传统的静态文件访问访问,我试了很多方式,包括自己写view,最后解决办法是这样,

url那一串我发现默认访问路径最后是,,127.0.0.1/upload/342328305230.jpg,类似如此,很明显,我们没有upload视图函数嘛,于是我自己写了一个。

先再一次看看我的url

from django.conf.urls import include, url
from django.contrib import admin
from sjjgWeb.views import *
from mySjjg.settings import BASE_DIR
urlpatterns = [
    url(r‘^ckeditor‘,include(‘ckeditor_uploader.urls‘)),
    url(r‘^admin/‘, include(admin.site.urls)),
    url(r‘^$‘,index),
    url(r‘^index$‘,index,name=‘homepage‘),
    url(r‘^login$‘,login),
    url(r‘^reg$‘,register),
    url(r‘^test$‘,test),
    url(r‘index/(?P<root>\d)/(?P<node>\d)‘,information,name=‘information‘),
    url(r‘^uploadimg/‘,upload_image),
    url(r‘^upload/(?P<path>(\S)*)‘,‘django.views.static.serve‘,{‘document_root‘:BASE_DIR+‘\upload‘}),  <---这一次重点是这里
]

本来自己写了视图函数,最后发现系统有默认静态处理的,第一个参数是 都懂得,第二个是系统的默认静态管理函数,第三个是上传的觉得路径,我引用了setting文件的BASE_DIR变量,最后加上你上传文件的文件夹就可以像访问静态文件一样访问了。到这里就一切大功告成了。。。附上我的成功图片。

想问我为什么后台管理为什么那么漂亮,我不会告诉你是djangoadminsuit皮肤的。

 
时间: 2024-08-06 11:34:39

django下的ckeditor 5.0 文本编辑器上传功能。的相关文章

【渗透课程】第八篇-上传漏洞之文本编辑器上传

Oday 常见的文本编辑器有CKEditor,Ewebeditor,UEditor,KindEditor,XHeditor等.其包含的功能类似,比如,图片上传.视频上传.远程下载等. 使用这类编辑器减少了程序开发的时间,但也存在通用性漏洞带来的危害 以FCKeditor(现已更名为CKEditor)为例,其存在如下漏洞 一.敏感信息暴露 1.1 查看版本信息 /FCKeditor/editor/dialog/fck_about.html 1.2 默认上传页面 /FCKeditor/editor/

百度ueditor富文本编辑器上传视频设置封面和禁止视频全屏、下载功能

最近在工作中用到了ueditor,这个最开始不是我接入到后台管理系统的,我半路接手,百度官方给的文档又写的很一般,不易理解,所以有很多问题解决的很麻烦. 在使用ueditor过程中,目前遇到的一些问题: 我们公司运营需要用ueditor实现微信公众号文章的编写,之前她们是直接把微信公众号文章复制到ueditor编辑器中,这样子是可以直接使用的.这样带来的一个问题是, 如果文章里有视频播放的话,视频的播放源全都是腾讯视频,我们公司商务反对了这种行为,所以运营提出文章内的视频由本地上传或者使用第三方

CI框架整合UEditor编辑器上传功能

最近项目中要使用到富文本编辑器,选用了功能强大的UEditor,接下来就来讲讲UEditor编辑器的上传功能整合. 本文UEditor版本:ueditor1_4_3_utf8_php版本 第一步:部署编辑器 HTML代码: 1 <textarea id="editor" class="editor" type="text/plain" style="width:100%;height:500px;"></te

修改UMeditor(百度富文本编辑器)上传视频

1. createPreviewVideo 所在位置video.js 2.修改 creatInsertStr 所在位置 umeditor.js 修改原因:小程序不支持<embed>标签. Date:11月1日 原文地址:https://www.cnblogs.com/sk8-xz/p/11790976.html

django项目中使用KindEditor富文本编辑器

先从官网下载插件,放在static文件下 前端引入 <script type="text/javascript" src="/static/back/kindeditor/kindeditor-all.js"></script> <script> KindEditor.ready(function (K) { window.editor = K.create('#content', { {# 加上这句话可以使jquery能获取到富

django之创建第10-1个项目-图片上传并记录上传时间

1.百度云盘:django之创建第10-1个项目-图片上传并记录上传时间 2.主要修改的配置文件有3个,forms.views和models3个文件以及html 3.forms.py文件修改 #coding:utf-8 #这里定义html页面中用到的表单,常和views和models文件配合使用 """ >>> help(django) Help on package django: PACKAGE CONTENTS conf (package) contr

vue+element ui +vue-quill-editor 富文本图片上传到骑牛云

vue-quill-editor上传图片会转换成base64格式,但是这不是我们想要的,之后翻了很多文章才找到想要的,下面直接上代码 <style lang="sass">.quill-editor min-height: 500px background:#fff .ql-container min-height: 500px .ql-snow .ql-editor img max-width: 480px .ql-editor .ql-video max-width:

Servlet3.0学习总结——基于Servlet3.0的文件上传

Servlet3.0学习总结(三)——基于Servlet3.0的文件上传 在Servlet2.5中,我们要实现文件上传功能时,一般都需要借助第三方开源组件,例如Apache的commons-fileupload组件,在Servlet3.0中提供了对文件上传的原生支持,我们不需要借助任何第三方上传组件,直接使用Servlet3.0提供的API就能够实现文件上传功能了. 一.使用Servlet3.0提供的API实现文件上传 1.1.编写上传页面 <%@ page language="java&

Kindeditor编辑器上传附件,自动获取文件名显示。

大部分在线编辑器在上传附件之后都是会以路径的形式显示出来很不友好.类似这样..怎么样显示成这样用户上传的原始文件名呢.就是这样.是不是看着很友好. kindeditor编辑器上传文件是已插件的形式调用的,包括其他类似的功能(批量上传图片,百度地图)都是在plugins目录下.打开insertfile目录下的insertfile.js文件.在文件上传之后的回调函数里面找到urlBox.val(url);在下面添加一行titleBox.val(data.title);这里会把后台上传文件之后返回的j