Django下Ckeditor上传图片的实现

环境:

Python 3.7

Django 2.1

Ckeditor:5.x

步骤1:

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

步骤2:

可以在ckeditor/config.js中配置。加入:config.filebrowserUploadUrl="/uploadimg/";#这个是post图片的URL

步骤3:

写接收的views(如果要对图片进行裁剪等操作,可以使用PIL)

def sceneImgUpload(request):
    if request.method == 'POST':
        callback = request.GET.get('CKEditorFuncNum')
        try:
            path = "static/upload/" + time.strftime("%Y%m%d%H%M%S", time.localtime())
            f = request.FILES["upload"]
            file_name = path + "_" + f.name
            des_origin_f = open(file_name, "wb+")
            for chunk in f.chunks():
                des_origin_f.write(chunk)
            des_origin_f.close()
        except Exception as e:
            print(e)
        res = ""
        return HttpResponse(res)
    else:
        raise Http404()

步骤4:
如果启用了csrf,会报错。因为ckeditor不会自带csrf,所以要自己添加。

打开ckeditor.js源文件,插入函数:

function getCookie(name){ 
var strCookie=document.cookie; 
var arrCookie=strCookie.split("; "); 
for(var i=0;i

然后搜索:multipart/form-data,会找到一个form,在这个form里面插入:

完成csrf的验证。


续:

因为ckeditor自带是异步提交,如果是自己配置提交上传图片选择框:

                            {% csrf_token %}                                                                                       

因为默认不是异步提交,如果需要异步提交,这里有2个参考方法:
1:使用插件ajaxupload.js

2:使用iframe


--------------------- 
作者:客栈 
来源:CSDN 
原文:https://blog.csdn.net/ypq5566/article/details/37594371 
版权声明:本文是基于博主 客栈 的《django下ckeditor上传图片的实现》一文进行更改,从而适配更高一版本的ckeditor。

你可能感兴趣的:(django)