Django mixin没有按预期工作

时间:2015-06-21 04:53:43

标签: python django

我想阻止 logged-in用户访问登录和注册表单 我已经构建了自定义mixin,但它不起作用。问题是,即使用户已登录,他也可以访问登录和注册表单,而不是重定向到主页。

我的Mixin

class MustBeAnonymousMixin(object):
    ''' Only anonymous users (not logged in) may access login and register
    '''

    def dispath(self, *args, **kwargs):
        if not self.request.user.is_anonymous:
            return redirect(reverse('homepage'))
        return super(MustBeAnonymousMixin, self).dispatch(*args, **kwargs)

LoginFormView

class LoginFormView(MustBeAnonymousMixin, TemplateView):
    '''
    Display basic user login form
    '''
    template_name = 'members/login.html'

    def get_context_data(self, **kwargs):
        context = super(LoginFormView, self).get_context_data(**kwargs)
        context['login_form'] = UserLoginForm()
        return context

我正在使用Django 1.8。我做错了什么?

3 个答案:

答案 0 :(得分:2)

修正错误dispath并使用is_authenticated()代替is_anonymous(已在上一个答案中指出)

答案 1 :(得分:1)

is_anonymous应该是一个函数调用,你可能不应该使用它:

  

is_anonymous()

     

始终返回False。这是一种区分用户和   AnonymousUser对象。通常,您应该更喜欢将is_authenticated()用于此方法。

答案 2 :(得分:0)

对于混合不起作用的另一种情况:

记住:“ Mixin参数”必须位于“ GenericView参数”之前

正确:

Item

错误:

MenuY