Django TemplateView的xframe_options_exempt

lap*_*ira 5 django iframe

我试图将装饰器@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中

Ala*_*air 9

装饰基于类的视图时,您应该使用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)


zep*_*lee 5

基于可用的@xframe_options_exempt装饰器,您还可以实现一个 mixin 类来混合到您的视图类中:

\n\n
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\n
Run Code Online (Sandbox Code Playgroud)\n