我在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)
答案 0 :(得分:1)
如果您注册了自定义后端,则视图中对authenticate
的调用将针对MyModelBackend
进行身份验证
Django尝试对其所有身份验证后端进行身份验证。 如果第一个身份验证方法失败,Django会尝试第二个身份验证方法, 等等,直到所有后端都被尝试过。
documentation中的示例也表明MyModelBacked
也需要实施get_user
方法
我相信,documentation清楚地解释了ModelBackend
的子类化内容以及如何成功完成