有的时候,我们便利店的销售员不需要获取所有顾客的信息。比如销售员需要通过知道顾客电话号码来获取顾客的VIP等级以便给顾客打折。这时候,我们就要用到过滤查询了。
流程:当销售员在浏览器输入 /sales/customers/?phonenumber=12344444444 ,要求服务器返回电话为12344444444顾客的vip等级。(数据库建立之初,我将vip划分了三六九等,vip=1→超级vip打7折;vip=2→尊贵vip打8折;vip=3普通vip打9折)
def listcustomers(request):
qs = Customer.objects.values()
#查看url链接中有没有phonenumber这个字段,有就返回字段,没有就返回None
findpn = request.Get.get('phonenumber',None) #注意,我这里Get写错了,应该是GET
if findpn:
qs = qs.filter(phonenumber=findpn)
# 定义返回字符串
retStr = ''
for customer in qs:
for name,value in customer.items():
retStr += f'{name} : {value} | '
retStr += '<br>'
return HttpResponse(retStr)
代码解释:
1、request.Get.get(‘phonenumber’,None):url请求中的所有参数都是放在request.Get对象中的,调用其get方法检查url中是否包含phonenumber。
2、if findpn: qs = qs.filter(phonenumber=findpn)
如果没包含,findpn为None,不执行;如果包含,调用filter参数,在qs这个表中,寻找phonenumber=findpn的那一条客户记录。
效果展示:
在浏览器中输入请求电话号码为12344444444用户的信息:http://127.0.0.1/sales/customers/?phonenumber=12344444444
报错如下:说’WSGIRequest’ object has no attribute ‘Get’,检查GET大小写,发现果然写错了。
错误写法——findpn = request.Get.get('phonenumber',None)
正确写法——findpn = request.GET.get('phonenumber',None)
修改之后,我们准确地找到了该电话号码所有者的信息。