django在使用wangeditor富文本时,在非admin页面中调用wangeditor/img_upload/接口时返回302状态码,跳转到了admin登录页面,具体错误是strict-origin-when-cross-origin
第一感觉是权限问题,不然不会跳到admin登录页面
顺着wangeditor源码找,发现wangeditor.urls.py中有一个staff_member_required()方法,百度了一下这个方法是限制只有后台权限的用户才能登录(django自带员工识别装饰器,识别只有is_staff 的用户才能登录后台系统),如后台首页登录限制,无论是在网址栏上直接输入网址还是前端跳转,只要不是员工都无法访问到后台。
from django.contrib.admin.views.decorators import staff_member_required # 验证用户是否已登录
from . import views
try:
from django.conf.urls import url
urlpatterns = [
url(r'^img_upload/$', staff_member_required(views.img_upload), name='img_upload'),
url(r'^video_upload/$', staff_member_required(views.video_upload), name='video_upload')
]
except ImportError:
from django.urls import path
urlpatterns = [
path('img_upload/', staff_member_required(views.img_upload), name='img_upload'),
path('video_upload/', staff_member_required(views.video_upload), name='video_upload')
]
解决方法就是重写wangeditor的urls.py文件,由于只有两个路径,直接放到项目目录的urls.py文件中重写了
from django.urls import path
import wangeditor.views as wang_view # 这里用于重写wangeditor的url
urlpatterns = [
# 富文本
# path('wangeditor/', include('wangeditor.urls')), 不使用原来的路由
path('wangeditor/img_upload/', wang_view.img_upload, name='img_upload'),
path('wangeditor/video_upload/', wang_view.video_upload, name='video_upload'),
]
if settings.DEBUG or True:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
去掉了staff_member_required()方法的管理员验证,前端就可以直接使用wangeditor/img_upload/添加图片了