最近在学python,忽然发现一个简单易上手的web开发框架,于是就用来开发了一个非常简单的摇号查询网页,先上图吧
如何做到的呢?先不急,咱们一步步来
1.安装flask,命令行执行pip install flask
2.在pycharm中新建一个flask项目
3.创建项目完成后默认自带一个app.py,我们先启动体验下
鼠标点击IDE中提示的访问地址http://127.0.0.1:5000/,然后就看到下图
4.编写自定义访问页面search.py,完成请求和数据返回
app = Flask(__name__)
@app.route('/search',methods=['GET'])
def search_form():
return '''
<body bgcolor="DodgerBlue">
<div style="text-align:center">
<font></font><br/><font></font><br/><font></font><br/>
<font face="宋体" size="+5" color="#F0F8FF">摇号结果查询</font><br/>
<font></font><br/>
<font></font><br/>
<form action ='/search' method='post'>
<input type="txt" rows="2" cols="60" placeholder="请输入姓名或编码...."
name='username' style="height:40px;width:500px;">
<button type="submit" class="search-submit"
style="height:38px;width:60px;">查询</button>
</form>
</div>
'''
#如果访问的是/search页面的post请求,则调用send_post()方法
@app.route('/search',methods=['POST'])
def search():
name = request.form['username']
#封装请求百度接口的方法
def send_post(name):
url = 'http://sp0.baidu.com/common/api/yaohao'
data = {
'name': name,
'city': '深圳'
}
#使用requests的get请求,返回json格式
res = requests.get(url=url,params=data).json()
#json.dumps将字典转换为json
return "<h3>"+json.dumps(res)+"</h3>"
if __name__ == '__main__':
app.run()
输入蔡辉,点击查询按钮
返回消息如下
5.截取数据只返回我们想要的字段
reslist = res.get("data")[0]
if reslist.get("dispNum") != '0':
dist = reslist.get("disp_data")
list = []
for i in dist:
eid = i.get('eid')
year = eid[0:4]
month = eid[4:6]
type = i.get('type')
str = '<h3>'+year+"年"+month+ "月 "+i.get('name')+ " "+i.get('tid')+'</h3>'
list.append(str)
return ("".join(list))
else:
return ('<h3>'+name+",很抱歉,您本期未中签!"+'</h3>')
结果如下,可是这相当于是另起一个网页返回了,如果想在原网页直接显示结果,应该如何做呢?
6.在templates目录下新建一个search.html文件,其中返回数据可以写入变量
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>search</title>
</head>
<body bgcolor="DodgerBlue">
<div style="text-align:center;color:#F0F8FF">
<br/><br/><br/>
<font face="宋体" size="+5">摇号结果查询</font><br/>
<br/><br/>
<form action ='/search' method='post'>
<input type="txt" rows="4" cols="60" placeholder="请输入姓名或编码...."
name='username' style="height:38px;width:480px;">
<button type="submit" class="search-submit" style="height:35px;width:60px;">查询</button>
</form>
<br/><br/>
{% for num in nums %}
<tr>
<td>{{ num.date }}</td>
<td>{{ num.name }}</td>
<td>{{ num.code }}</td>
<br/>
</tr>
{% endfor %}
<h3>{{ tips }}</h3>
</div>
</body>
</html>
7.修改search.py中的 search_form方法,直接返回search.html方法
from flask import render_template
def search_form():
return render_template('search.html')
修改send_post()方法中数据返回代码:
if reslist.get("dispNum") != '0':
dist = reslist.get("disp_data")
list = []
for i in dist:
dict = {}
eid = i.get('eid')
year = eid[0:4]#截取eid前4位字符
month = eid[4:6]
type = i.get('type')
dict['date'] = year+"年"+ month+“月”
dict['name'] = i.get('name')
dict['code'] = i.get('tid')
list.append(dict)#dict中的3个字段与html中定义的变量需一致
return render_template('search.html',nums=list)
else reslist.get("dispNum") == '0':
return render_template('search.html', tips= name + ",很抱歉,您本期未中签!")
8.效果如下:
9.到这里你以为都大功告成了吧,NO,不信你不输入任何信息,直接点查询试试?是的,会报错,结果如下图,所以我们还需要考虑一些异常情况。
再接着改呗,修改访问页面的post请求方法,使用strip方法去掉前后空格
@app.route('/search',methods=['POST'])
def search():
name = request.form['username'].strip()#strip去除前后空格
if name:
return send_post(name)
else:
return render_template('search.html', tips="请输入正确的姓名或编码")
现在不输入任何信息,直接点击提交就会有提示信息了,如下图所示
好了,至此一个最简单的web页面就开发完成了。