美文网首页
用flask开发一个查询页面

用flask开发一个查询页面

作者: 寻叶亭 | 来源:发表于2018-08-24 20:11 被阅读1304次

最近在学python,忽然发现一个简单易上手的web开发框架,于是就用来开发了一个非常简单的摇号查询网页,先上图吧

小汽车摇号查询

如何做到的呢?先不急,咱们一步步来

1.安装flask,命令行执行pip install flask

2.在pycharm中新建一个flask项目

3.创建项目完成后默认自带一个app.py,我们先启动体验下

运行app.py

鼠标点击IDE中提示的访问地址http://127.0.0.1:5000/,然后就看到下图

image.png

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()

输入蔡辉,点击查询按钮

返回消息如下

response

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,不信你不输入任何信息,直接点查询试试?是的,会报错,结果如下图,所以我们还需要考虑一些异常情况。

image.png

再接着改呗,修改访问页面的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页面就开发完成了。

相关文章

网友评论

      本文标题:用flask开发一个查询页面

      本文链接:https://www.haomeiwen.com/subject/zzxiiftx.html