本节课程继续讲解增删改查中的查询功能,通过这个功能的介绍,我们可以开发一个简单的数据搜索,该功能类似百度查询,当然仅仅只是最基础的数据库关键词查询功能。
开发用户查询页面,我们从实际用户查询行为的角度出发,我们需要做如下开发:
1)修改用户列表页面,增加一个查询功能;
2)增加一个搜索页面,显示搜索得到的结果;
3)开发路由,用于显示搜索信息的结果页;
4)开发一个视图函数,用于接收用户查询信息并返回查询结果。
由于开发过程的逻辑和之前注册页面和用户列表页面有些类似,这里不再过长赘述,直接描述如何去开发这个搜索页面。
第1步:修改用户列表页面
我们在ljyUserList.html页面中添加一个可以用于查询数据的控件,这个控件应该在一个form表单中,添加在用户列表标题和表格中间,添加代码如下:
<div>
<form action="/search/" method="get">
姓名:<input type="text" name="mykey"> <input type="submit" value="查询"> <br><br>
</form>
</div>
整个body的html代码结果如下图所示:
启动网站后,页面效果如下图所示。
第2步:添加一张查询页面模板ljySearch.html
这张查询页面和之前用用户列表页面有些相似,只是为了后期开发更多功能,我们新增这个页面,我们也可以将这个页面的样式重新开发。
ljySearch.html模板页面代码如下所示。
<!DOCTYPE html>
{%load static%}
<html lang="en">
<head>
<meta charset="UTF-8">
<title>查询页面</title>
<link rel="stylesheet" href="{%static 'css/userlist.css'%}">
</head>
<body>
<h1>用户查询页面</h1>
<div>
<form action="/search/" method="get">
姓名:<input type="text" name="mykey"> <input type="submit" value="查询"> <br><br>
</form>
</div>
<div>
查询结果如下:
</div>
<table>
<tr>
<th>编号</th>
<th>账号</th>
<th>密码</th>
<th>姓名</th>
<th>性别</th>
<th>年龄</th>
</tr>
{%for user in userlist%}
<tr>
<td>{{user.userID}}</td>
<td>{{user.username}}</td>
<td>{{user.password}}</td>
<td>{{user.truename}}</td>
<td>{{user.sex}}</td>
<td>{{user.age}}</td>
</tr>
{%endfor%}
</table>
</body>
</html>
第3步:添加路由
现在我们添加一个路由,使得查询提交信息到指定的视图函数中。由于这里我们是做查询信息,所以我们重新开发一个新的视图函数专门用于显示查询结果,这样的表述比较清晰。当然,有的读者可能会问:“我能不能把这个功能开发在用户列表显示的视图函数中?”我想说,当然可以的,只要将这两块用能用逻辑能够表述清楚就可以。
现在我们在路由规则的最后添加如下代码:
path('search/', views.getLjyUserByName),
在这里,我们构造了一个视图函数getLjyUserByName来获取查询数据。因此下面我们就需要开发这个视图函数了。
第4步:开发视图函数
#根据用户姓名查询获取数据结果
def getLjyUserByName(request):
mykey=request.GET['mykey'] #接收form表单中提交的关键词
users=LjyUser.objects.filter(truename__contains=mykey) #这里使用filter函数从数据库中过滤输入的关键词,truename__contains表示字段truename上进行匹配,与之相连的__contains表示包含的意思,这样总体就会返回查询结果就是包含输入关键词的真实姓名的所有记录
return render(request,'ljyblog/ljySearch.html',{'userlist':users})#将查询结果传递给查询结果页面,类似之前的用户信息列表
我们在代码中已经对查询整个过程的语句已经做了详细的解释。主要在这个查询中,我们使用到了filter函数的功能,用来过滤指定字段的数据,结果返回一个列表。如果查询不到,结果就返回一个长度为0的空列表。在filter方法内,我们使用了真实姓名truename这个字段去进行查询,传入的mykey就是输入的姓名的关键词。为了能更方便地实现查询功能,我们在这里使用模糊查询的参数,这个参数就是contains,使用格式为:
字段名称__contains
注意,这里的符号__是两个下划线,千万不要漏写哦!那么总体的这个意思是指包含后面的mykey这个变量的值的意思,这样我们就实现模糊查询了!
为了测试,我们现在到注册页面随机注册一些用户数据,使得数据库如下数据。
现在,我们测试输入一个“刘”,就可以输出测试结果了。
如果我们输入“金”,那么就只能出现一行数据了,因为现在数据库表里只有“刘金玉”姓名这样一个用户。
至此,我们查询页面开发完成。
相关文章: