在做登录注册的时候遇到userinfo matching query does not exist
def login(request):
error = '用户名或密码错误'
if request.method == 'GET':
return render(request,'login.html')
else:
dict1 = request.POST
username = dict1.get('username')
pwd = dict1.get('pwd')
uname = UserInfo.objects.get(guser=username)
upwd = UserInfo.objects.get(gpwd=pwd)
if uname and upwd:
return redirect('/',{'username':username})
else:
return render(request,'login.html',{'error':error})
查过网上叫什么堆栈溢出,这个不管,其实就是在进行数据库查询的时候用了get方法,这会导致查询结果不存在则报错,也就是上面那个错误。
所以只需要将get改成filter即可。
def login(request):
error = '用户名或密码错误'
if request.method == 'GET':
return render(request,'login.html')
else:
dict1 = request.POST
username = dict1.get('username')
pwd = dict1.get('pwd')
uname = UserInfo.objects.filter(guser=username).filter(gpwd=pwd)
if uname and upwd:
return redirect('/',{'username':username})
else:
return render(request,'login.html',{'error':error})
附送一个BUG,我们知道登录做的其实就是条件查询,如果我们在登录的时候将用户名查询和密码查询分开写,或者写的复杂点密码查询变成二级查询,前者会导致我用别人的密码也可以登录自己的账户,只要数据库里有,后者是没必要,Django对数据库的查询是只要你符合逻辑,就可以无限连下去。
本来觉得没必要说这个bug的,但毕竟自己也在写的时候犯了这个小迷糊,就顺带记上吧。