簡體   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