python千奇百怪的debug过程——Django 出错记录(2)——userinfo matching query does not exist

在做登录注册的时候遇到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的,但毕竟自己也在写的时候犯了这个小迷糊,就顺带记上吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值