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