首页 > IT职业 > IT生活 > Django学习笔记(6-2 用户登录-2)
def login(request):
......
if user is not None:
#这里会报错,因为有两个login,所以很重要的一点,函数名称不要和默认名称一样。否则就会使用混乱。否则就要写全路径
#这也说明了python的函数可以自己调用自己
login(request,user)
return render(request,"index.html")
else:
return render(request,"login.html")
...... 改为
def user_login(request): 在session有效期内,即使没有登陆也会自动登陆
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)
#password是密文,so,不能password=password,因为用户输入的是明文呀
#userprofile继承了adstractuser,所以有个check_password方法
if user.check_password(password):
return user
except Exception as e:
return None setting.py
AUTHENTICATION_BACKENDS = (
‘users.views.CustomBackend',
#注意一定要加“,”特别是元组数据的时候
) user = UserProfile.objects.get(username=username,)
#,是并集 username和eamil登陆是“或”关系,现在介绍Q
user = UserProfile.objects.get(Q(username=username)|Q(email=username),Q(password=password))
#并非全是并集,而是并集与交集的随意排版
#把password去掉
user = UserProfile.objects.get(Q(username=username)|Q(email=username)) def login(request):
......
if user is not None:
login(request,user)
return render(request,"index.html")
else:
return render(request,"login.html",{"msg":"用户名或密码错误"})
...... {{ msg }}
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/506/viewspace-2799295/ ,如需转载,请注明出处,否则将追究法律责任。