Django TemplateView的xframe\u选项\u豁免
我试图将decorator@xframe\u options\u empture添加到django模板视图中,但它带有 异常值:“dict”对象没有属性 “xframe\u选项\u豁免” 我注意到在Django 1.9文档中,decorator用于带有请求参数的视图,我使用的是TemplateView 可以这样使用吗Django TemplateView的xframe\u选项\u豁免,django,iframe,Django,Iframe,我试图将decorator@xframe\u options\u empture添加到django模板视图中,但它带有 异常值:“dict”对象没有属性 “xframe\u选项\u豁免” 我注意到在Django 1.9文档中,decorator用于带有请求参数的视图,我使用的是TemplateView 可以这样使用吗 class MyView(TemplateView): """ """ template_name = 'app/template.html'
class MyView(TemplateView):
"""
"""
template_name = 'app/template.html'
from django.views.decorators.clickjacking import xframe_options_exempt
@xframe_options_exempt
def get_context_data(self, **kwargs):
context = {}
context['test'] = 'hello'
return context
基本上,我需要将django模板视图嵌入到iframe中。如果其他任何人有此问题,此装饰器无法应用于获取上下文数据方法,但您可以从TemplateView重写获取方法,类似于:
class MyView(TemplateView):
"""
"""
template_name = 'app/template.html'
from django.views.decorators.clickjacking import xframe_options_exempt
@xframe_options_exempt
def get(self, request, *args, **kwargs):
context = self.get_context_data(**kwargs)
return self.render_to_response(context)
def get_context_data(self, **kwargs):
context = {}
context['test'] = 'hello'
return context
这将实现技巧当您是时,您应该使用方法\u decorator
。您应该重写将请求
作为参数的方法,例如分派
(将适用于所有请求类型)或获取
(将适用于获取请求,但不适用于post请求)。正如您所发现的,装饰get\u context\u data
将不起作用
class MyView(TemplateView):
@method_decorator(xframe_options_exempt):
def dispatch(self, *args, **kwargs):
return super(MyView, self).dispatch(*args, **kwargs)
请注意,通过使用super()
您不必从TemplateView
复制代码
如果愿意,您可以装饰班级(Django 1.9+)
基于可用的
@xframe\u options\u export
decorator,您还可以实现要混合到视图类中的mixin类:
class XFrameOptionsExemptMixin:
@xframe_options_exempt
def dispatch(self, *args, **kwargs):
return super().dispatch(*args, **kwargs)
class SomeView(XFrameOptionsExemptMixin, TemplateView):
…
很好,我知道有一个更干净的方法可以做到这一点,所以我尝试了上面两个版本,但没有一个对我有效。它说“拒绝在框架中显示*,因为它将“X-frame-Options”设置为“SAMEORIGIN”。“知道为什么吗?与其在这里发表评论,不如提出新问题。”。我不熟悉clickjacking保护功能,所以我没办法。
class XFrameOptionsExemptMixin:
@xframe_options_exempt
def dispatch(self, *args, **kwargs):
return super().dispatch(*args, **kwargs)
class SomeView(XFrameOptionsExemptMixin, TemplateView):
…