Django 开发,在上传图片的时候出现:'X-Frame-Options' to 'deny'成功解决办法

浏览器默认遵循X-Frame-Options协议头,它表明一个资源是否允许加载到frame或者iframe中。如果响应包含值为SAMEORIGIN的协议头,浏览器会在frame中加载同源请求的资源。如果协议头设置为DENY,浏览器会在加载frame时屏蔽所有资源,无论请求来自于哪个站点。
Django中提供了一些简单的方法来在你站点的响应中包含这个协议头:
(1)一个简单的中间件,在所有响应中设置协议头。如果要为你的站点中所有的响应设置相同的X-Frame-Options值,就可以将项目中settings.py文件中的添加中间件:‘django.middleware.clickjacking.XFrameOptionsMiddleware’设置为‘MIDDLEWARE’:
MIDDLEWARE = [
	'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

在开启该中间件之后,默认会为任何开放的HttpResponse设置X-Frame-Options协议头为DENY,如果你想要设置为SAMEOGIGIN,可以在settings.py文件中设置:

X_FRAME_OPTIONS = 'SAMEORIGIN'

但是这样的话会使该站点所有的视图都使用X-Frame-Options协议头,对于某些视图函数,我们可以使用特定的装饰器告诉中间件不要设置协议头.

1. 在views.py文件中使用装饰器
from django.views.decorators.clickjacking import xframe_options_sameorigin, xframe_options_exempt,xframe_options_deny
引用装饰器,xframe_options_sameorigin,允许同源访问的装饰器
@xframe_options_sameorigin
def send_file(request,filename):
    fp = open(os.path.join(UEDITOR_UPLOAD_PATH,filename),'rb')
    response = FileResponse(fp)
    response['X-Frame-Options'] = settings.X_FRAME_OPTIONS
    return response
2. 引用装饰器xframe_options_exempt,告诉中间件访问该视图时不要设置协议头:
from django.http import HttpResponse
from django.views.decorators.clickjacking import xframe_options_exempt

@xframe_options_exempt
def xframe_exempt(request):
	return HttpResponse('这个页面是安全的')
3.引用装饰器xframe_options_deny, 告诉中间件访问该视图时屏蔽在加载frame时的所有资源:
from django.http import HttpResponse
from django.views.decorators.clickjacking import xframe_options_deny

@xframe_options_deny
def deny_xframe(request):
	return HttpResponse('拒绝所有的资源')
发布了206 篇原创文章 · 获赞 36 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/zjy123078_zjy/article/details/105324382
今日推荐