繁体   English   中英

Django mixin不能按预期工作

[英]Django mixin not working as expected

我想防止已 logged-in用户访问登录和注册表单。
我已经建立了自定义的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。 我究竟做错了什么?

修复dispath的错字,并使用is_authenticated()代替is_anonymous (如上一个答案所示)

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

is_anonymous()

始终返回False。 这是区分User和AnonymousUser对象的一种方式。 通常,您应该更喜欢使用is_authenticated()代替此方法。

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

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

正确:

class PostDelete(LoginRequiredMixin, generic.DeleteView):

不正确:

class PostDelete(generic.DeleteView, LoginRequiredMixin):

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM