我试图将装饰器@xframe_options_exempt添加到django模板视图中,但它抱怨了
异常值:'dict'对象没有属性'xframe_options_exempt'
我注意到在Django 1.9文档中,装饰器用于带有请求参数的视图,我使用的是TemplateView.
有可能像这样使用它吗?
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
Run Code Online (Sandbox Code Playgroud)
基本上我需要将一个django模板视图嵌入到iframe中
在装饰基于类的视图时,您应该使用method_decorator.您应该覆盖一个request将参数作为参数的方法,例如dispatch(将应用于所有请求类型)或get(将应用于获取请求但不适用于发布请求).正如您所发现的那样,装饰get_context_data将不起作用.
class MyView(TemplateView):
@method_decorator(xframe_options_exempt):
def dispatch(self, *args, **kwargs):
return super(MyView, self).dispatch(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
请注意,通过使用super()您不必复制代码TemplateView.
如果您愿意,Django 1.9允许您装饰类:
@method_decorator(xframe_options_exempt, name='dispatch')
class ProtectedView(TemplateView):
template_name = 'secret.html'
Run Code Online (Sandbox Code Playgroud)
基于可用的@xframe_options_exempt装饰器,您还可以实现一个 mixin 类来混合到您的视图类中:
class XFrameOptionsExemptMixin:\n @xframe_options_exempt\n def dispatch(self, *args, **kwargs):\n return super().dispatch(*args, **kwargs)\n\nclass SomeView(XFrameOptionsExemptMixin, TemplateView):\n \xe2\x80\xa6\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
1899 次 |
| 最近记录: |