Django RedirectView“CSRF令牌丢失或不正确。”

时间:2016-02-03 14:28:49

标签: python django python-2.7 redirect django-1.6

即使我使用csrf_exempt装饰器(通过帮助器mixin),我也遇到了CSRF验证问题。

这是我的代码:

class CSRFExemptMixin(object):
    @method_decorator(csrf_exempt)
    def dispatch(self, request, *args, **kwargs):
        return super(CSRFExemptMixin, self).dispatch(request, *args, **kwargs)

class IndexRedirectView(RedirectView, CSRFExemptMixin):
    permanent = False

    def get_redirect_url(self, *args, **kwargs):
        if self.request.user.visit_count >= 5:
            return reverse('gift-shop')
        if len(BaseGiftableInstance.objects.filter(giving_user=self.request.user)) > 0:
            # has won something
            return reverse('gift-shop')
        return reverse('spinner')

这是一款Facebook画布应用。

1 个答案:

答案 0 :(得分:3)

由于继承顺序很重要,您应该替换

class IndexRedirectView(RedirectView, CSRFExemptMixin)

class IndexRedirectView(CSRFExemptMixin, RedirectView)

在第一种情况下,IndexRedirectView的{​​{1}}方法调用dispatch()的一个,它没有RedirectView装饰器,导致CSRF验证失败。