[英]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.