在Django中验证用户登录的更好方法?

时间:2014-03-13 20:11:26

标签: python django django-models django-registration authentication

我在authenticating中遇到了Django用户名和密码的这两种方式。 这是首选方法,为什么?

一种方式:

from django.contrib.auth import authenticate, login, logout

if request.method == 'POST':
                form = LoginForm(request.POST)
                if form.is_valid():
                        username = form.cleaned_data['username']
                        password = form.cleaned_data['password']
                        drinker = authenticate(username=username, password=password)
                        if drinker is not None:
                                login(request, drinker)
                                return HttpResponseRedirect('/profile/')

其他方式:

from django.contrib.auth.backends import ModelBackend

class MyModelBackend(ModelBackend):
    def authenticate(self, username=None, password=None):
        print "My Logic"
        return super(MyModelBackend, self).authenticate(username=username, password=password)

1 个答案:

答案 0 :(得分:1)

如果您注册了自定义后端,则视图中对authenticate的调用将针对MyModelBackend进行身份验证

  

Django尝试对其所有身份验证后端进行身份验证。   如果第一个身份验证方法失败,Django会尝试第二个身份验证方法,   等等,直到所有后端都被尝试过。

documentation中的示例也表明MyModelBacked也需要实施get_user方法

我相信,documentation清楚地解释了ModelBackend的子类化内容以及如何成功完成