前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python 实战(4):搜一下

Python 实战(4):搜一下

作者头像
Crossin先生
发布2018-04-16 12:11:07
1.2K0
发布2018-04-16 12:11:07
举报
文章被收录于专栏:Crossin的编程教室

一个内容型网站如果不能进行站内搜索,那是会令人抓狂的。都说知乎的搜索不好使,可人家好歹也是有的。所以我们的电影网站至少也得有个搜素框。

那么要如何做呢?HTML 里有一个 form 标签,它的作用是创建一个表单,用来提交一些数据。诸如搜索、登录、评论等操作,都可以通过 form 标签来解决。前面说过,我们直接在流量器里访问一个 url 地址是向服务器发送了一个 GET 请求。而用 form,就可以选择使用 POST 请求,从而更方便更安全地传递数据。

这件事情的大体思路是,在首页上通过 form 标签增加一个搜索框。当用户输入文字点击搜索后,会向服务器发送一个 POST 请求。服务器端的代码里拿到请求中的文字,在数据库里搜索标题中包含此文字的影片列表,返回给首页模板进行显示。

在首页模板 index.html 中添加搜索框:

代码语言:javascript
复制
<form action="/" method="post">
 <input type="text" name="title" />
  <input type="submit" value="搜索" />
</form>

action 是请求的地址,这里选择向首页请求,method 表示方法是 POST。input 是表单中的元素,type="text" 表示一个文本框,name="title" 在服务器端处理数据时会用到。type="submit" 表示一个提交按钮,value="搜索" 是按钮上显示的文字。

添加完之后刷新页面,可以看到已经有了一个搜索框。不过此时输入内容并点击“搜索”后,页面会显示 None。这是因为服务器端的 index 类中还没有对 POST 请求做相应的处理。所以,在 code.py 里,index 类中的 GET 方法下,增加一个类似的 POST 方法:

代码语言:javascript
复制
def POST(self):
   data = web.input()
   condition = r'title like "%' + data.title + r'%"'
   movies = db.select('movie', where=condition)
   return render.index(movies)

web.input() 拿到的是表单传入的数据,data.title 就是用户输入的文本。与 GET 方法中获取数据库中所有影片不同,这里额外增加一项搜索条件:

title like "%搜索内容%"

这里用r''是为了防止 python 默认对于字符串中 % 的转义。

like 是 SQL 的语法,% 表示匹配 0 到任意多个字符。这里对应完整的 SQL 查询语句是:

select * from movie where title like "%搜索内容%";

执行效果是查询出所有标题中包含(搜索内容)的影片数据。

此时再点击搜索,便可看见,首页上的影片列表只会列出符合搜索条件的影片标题。在之后数据量增加的情况下,这个小小的功能将会大有用处。

(相关代码文件已上传在论坛的帖子里)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2015-05-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Crossin的编程教室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档