通过邮箱登陆
- 在setting中重载变量(是一个元组方法)
<code>AUTHENTICATION_BACKENDS = (
'users.views.CustomBackend',
)</code>
元组一点要加“,”
- 在users的views.py写入一个类(该类里这个方法会被django自动调用)
<code>from django.contrib.auth.backends import ModelBackend
from .models import UserProfile
class CustomBackend(ModelBackend):
def authenticate(self, username=None, password=None, **kwargs):
try:
user = UserProfile.objects.get(username = username)
if user.check_password(password): #UserProfile继承的是AbstractUser的方法#
return user
except Exception as e:
return None
</code>
django密码存储的是密文,无法查询
UserProfile继承的是AbstractUser
- 在viwes.py中以下三行打断点进行Debug
<code>
try:
user = UserProfile.objects.get(username = username)
if user is not None:
</code>
F8完成当前debug F6调试进入debug下一步
- 在元组中做并集以使邮箱 手机号等 都能登陆
<code>
from django.db.models import Q
user = UserProfile.objects.get(Q(username = username)|Q(email=username))
</code>
并集的查询 也可以做并集和交集的混用 在后面加,即可加入
用户密码错误提醒
<code>else:
return render(request, "login.html", {"msg":"用户名或密码错误!"})</code>
在view中加入msg
再到login中加入{{ msg }}