开发环境

django 1.11

django-ckeditor 5.3.1(CKEditor 4.7.3)

发生背景

前端页面引用了 CKEditor 富文本编辑器,Django 未登录的时候上传文件就会报:"不正确的服务器响应"。

错误提示

Incorrect Server Response

控制台日志

GET /admin/login/?next=/ckeditor/upload/ HTTP/1.1

从控制台可以看出来,会跳转到 admin 登录页面,也就是需要验证登录才能上传,那怎么才能取消登录验证呢?

查看 ckeditor 源码

..\Lib\site-packages\ckeditor_uploader\urls.py

from __future__ import absolute_import

import django

from django.conf.urls import url

from django.contrib.admin.views.decorators import staff_member_required

from django.views.decorators.cache import never_cache

from . import views

if django.VERSION >= (1, 8):

urlpatterns = [

url(r'^upload/', staff_member_required(views.upload), name='ckeditor_upload'),

# url(r'^upload/', views.upload, name='ckeditor_upload'), # ckeditor 上传文件不验证登录状态

url(r'^browse/', never_cache(staff_member_required(views.browse)), name='ckeditor_browse'),

]

else:

from django.conf.urls import patterns

urlpatterns = patterns(

'',

url(r'^upload/', staff_member_required(views.upload), name='ckeditor_upload'),

url(r'^browse/', never_cache(staff_member_required(views.browse)), name='ckeditor_browse'),

)

在上面第 12 行代码这里可以看到,views.upload 还加一个 staff_member_required 验证,点进去看一下:

..\Lib\site-packages\django\contrib\admin\views\decorators.py

from django.contrib.auth import REDIRECT_FIELD_NAME

from django.contrib.auth.decorators import user_passes_test

def staff_member_required(view_func=None, redirect_field_name=REDIRECT_FIELD_NAME,

login_url='admin:login'):

"""

Decorator for views that checks that the user is logged in and is a staff

member, redirecting to the login page if necessary.

"""

actual_decorator = user_passes_test(

lambda u: u.is_active and u.is_staff,

login_url=login_url,

redirect_field_name=redirect_field_name

)

if view_func:

return actual_decorator(view_func)

return actual_decorator

从 staff_member_required 可以看出验证了 lambda u: u.is_active and u.is_staff 状态,所以我们要想去掉 ckeditor 的上传文件的验证,就需要放开登录验证,通过修改 ckeditor 上传路由的那行代码,能关掉登录验证。

解决方法

..\Lib\site-packages\ckeditor_uploader\urls.py 下把 staff_member_required  去掉:

from django.contrib.admin.views.decorators import staff_member_required

urlpatterns = [

# url(r'^upload/', staff_member_required(views.upload), name='ckeditor_upload'),

url(r'^upload/', views.upload, name='ckeditor_upload'), # ckeditor 上传文件不验证登录状态

url(r'^browse/', never_cache(staff_member_required(views.browse)), name='ckeditor_browse'),

]

也可以自己写一个验证规则,替换掉 staff_member_required。

staff_member_required 拓展

此函数可以拓展到任何一个路由上,做登录验证,也可以重写 staff_member_required 验证逻辑。

比如,本地的 media 文件需要登录了才能查看

# django 1.11.x

from django.conf.urls import url

from django.views.static import serve

from django.conf import settings

from django.contrib.admin.views.decorators import staff_member_required

from django.contrib.auth.decorators import login_required

urlpatterns = [

url(r'^media/(?P.*)$', staff_member_required(serve), {"document_root": settings.MEDIA_ROOT}),

]

# ..\Lib\site-packages\django\contrib\auth\decorators.py

def login_required(function=None, redirect_field_name=REDIRECT_FIELD_NAME, login_url=None):

"""

Decorator for views that checks that the user is logged in, redirecting

to the log-in page if necessary.

"""

actual_decorator = user_passes_test(

lambda u: u.is_authenticated,

login_url=login_url,

redirect_field_name=redirect_field_name

)

if function:

return actual_decorator(function)

return actual_decorator

上传服务器响应失败,Django CKEditor 上传图片提示“不正确的服务器响应”的解决办法...相关推荐

  1. 安卓上传文件php失败,android - php上传图片时 $_FILES为空

    写了一个php上传的程序,用来接收安卓post上传过来的图片,接收到的$_FILES为空. 这个程序在之前的服务器上是可以的,程序没有改动的情况下,迁移到新的服务器后就不行了.原来的服务器php 5. ...

  2. php图片上传不现实路径指向错误,上传图片提示这个错误怎么办?

    pic2里面报错的位置标出来了 pic.php ZwelL图片上传程序 上传文件: 允许上传的文件类型为:=implode(', ',$uptypes)?> pic2.php 已经成功上传 文件 ...

  3. FASTDFS上传文件时报错,org.csource.commom.MyException:getStoreStorage fail,error code : 28解决办法

    原因:这是因为文件服务器上的磁盘空间不大于10%了 storage上的剩余磁盘空间必须在10%以上才能上传文件成功,否则上传失败. 解决方法: 拓展服务器的内存空间,也可以删除一些不用的文件

  4. 使用jquery文件上传控件Uploadify来异步上传图片

    1.项目中需要图片的异步上传,度娘之后发现有一个插件可以完成这个需求,即是:Uploadify 下面是这个异步上传的插件的一个简单介绍: 基于jquery的文件上传控件,支持ajax无刷新上传,多个文 ...

  5. FTPClient上传文件storeFile失败,没有异常,切换目录操作可以成功

    FTPClient上传文件storeFile失败,没有异常,切换目录操作可以成功 解决方法: 有没有设置被动模式. 防火墙 有没有设置被动模式 要执行下面的语句 ftpClient.enterLoca ...

  6. 两步快速解决浏览器上传本地文件失败问题

    两步快速解决浏览器上传本地文件失败问题 学校教学平台上传作业总是没法弹出本地目录,经过查资料和试验,我总结了解决方法,只需两步. 使用到的浏览器 ie浏览器 目录 两步快速解决浏览器上传本地文件失败问 ...

  7. 上传文件连接失败问题

    上传文件连接失败 问题发现 想要从本机上上传文件到虚拟机的ubuntu系统上,尝试使用filezilla来连接上传,但是显示连接错误. ifconfig命令检查ip是否输入错误.关闭防火墙.修改ssh ...

  8. 文件上传下载配置失败

    1.multipartResolver注册失败,此依赖导入后仍无效 <!--文件上传--><dependency><groupId>commons-fileuplo ...

  9. [ArcGIS Server] 错误:上传服务定义失败

    问题 上传的服务 上传服务定义失败 ERROR:the server's publishing job didn't succeed 执行(UploadServiceDefinition)失败 问题解 ...

最新文章

  1. 微型角度编码器 : KYTB-1503-1024
  2. python 权限修饰符
  3. “365算法每日学计划”:03打卡-贪心算法
  4. [教程]发一个iPhone收发邮件设置(163、126邮箱)
  5. uvalive 3135 Argus
  6. C#实现二叉树--二叉链表结构
  7. 【6】nagios从零学习使用 - centreon发送邮件报警
  8. mapreduce之partition分区
  9. PWN-PRACTICE-BUUCTF-4
  10. 计算机网络之数据链路层:8、介质访问控制之信道划分介质访问控制
  11. awk正则匹配nginx日志【原创】
  12. 使用隐含参数testMappingSpeed排查GoldenGate抽取慢的步骤
  13. STM32 常见的问题解决
  14. php任意地方关闭弹窗,vue和jq中实现点击任意地方关闭弹窗
  15. 三、JAVA流程控制(选择结构if、while、for、switch)
  16. 不是技术牛人,如何拿到国内IT巨头的Offer
  17. MATLAB泰勒展开
  18. 考研计算机专业流程,计算机专业考研复试基本流程-文都教育.doc
  19. 第四章 姜诸儿意气风发登君位 鲁桓公窝囊枉死彭生手
  20. 控制台报错:java.security.InvalidKeyException: Illegal key size

热门文章

  1. leetcode力扣刷题系列python——2、两数相加
  2. Apache Maven 入门篇 ( 上 )
  3. Linux内核分析——操作系统是如何工作的
  4. C#操作EXCLE表
  5. [Color]彩色转灰度算法彻底学习
  6. “Get that job at Google”笔记
  7. bootstrap下的双选时间插件使用方法
  8. LINQ语法之into
  9. 页面缓存 OutputCache
  10. Sharepoint WebService引用