美文网首页程序员大数据 爬虫Python AI Sql软件测试
雪峰磁针石博客]flask构建自动化测试平台5-提高用户体验

雪峰磁针石博客]flask构建自动化测试平台5-提高用户体验

作者: oychw | 来源:发表于2018-07-09 11:35 被阅读80次

    5-提高用户体验

    本章将介绍以下主题:

    • cookies
    • CSS

    本文最新版本

    代码: headlines.py

    import feedparser
    from flask import Flask
    from flask import render_template
    from flask import request
    from flask import make_response
    
    import datetime
    import json
    import urllib
    
    app = Flask(__name__)
    
    RSS_FEEDS = {'bbc': 'http://feeds.bbci.co.uk/news/rss.xml',
                 'cnn': 'http://rss.cnn.com/rss/edition.rss',
                 'fox': 'http://feeds.foxnews.com/foxnews/latest',
                 'iol': 'http://www.iol.co.za/cmlink/1.640'}
    
    WEATHER_URL = "http://api.openweathermap.org/data/2.5/weather?q={}&units=metric&APPID=cb932829eacb6a0e9ee4f38bfbf112ed"
    CURRENCY_URL = "https://openexchangerates.org//api/latest.json?app_id=b23c94daab584f4580e4e2bf75cbcf7e"
    
    DEFAULTS = {'publication': 'bbc',
                'city': 'London,UK',
                'currency_from': 'GBP',
                'currency_to': 'USD'
                }
    
    
    def get_value_with_fallback(key):
        if request.args.get(key):
            return request.args.get(key)
        if request.cookies.get(key):
            return request.cookies.get(key)
        return DEFAULTS[key]
    
    
    @app.route("/")
    def home():
        # get customised headlines, based on user input or default
        publication = get_value_with_fallback("publication")
        articles = get_news(publication)
    
        # get customised weather based on user input or default
        city = get_value_with_fallback("city")
        weather = get_weather(city)
    
        # get customised currency based on user input or default
        currency_from = get_value_with_fallback("currency_from")
        currency_to = get_value_with_fallback("currency_to")
        rate, currencies = get_rate(currency_from, currency_to)
    
        # save cookies and return template
        response = make_response(render_template("home.html", articles=articles,
                                                 weather=weather, currency_from=currency_from,
                                                 currency_to=currency_to, rate=rate, currencies=sorted(currencies)))
        expires = datetime.datetime.now() + datetime.timedelta(days=365)
        response.set_cookie("publication", publication, expires=expires)
        response.set_cookie("city", city, expires=expires)
        response.set_cookie("currency_from", currency_from, expires=expires)
        response.set_cookie("currency_to", currency_to, expires=expires)
        return response
    
    
    def get_rate(frm, to):
        all_currency = urllib.request.urlopen(CURRENCY_URL).read().decode('utf-8')
        parsed = json.loads(all_currency).get('rates')
        frm_rate = parsed.get(frm.upper())
        to_rate = parsed.get(to.upper())
        return (to_rate / frm_rate, parsed.keys())
    
    
    def get_news(publication):
        feed = feedparser.parse(RSS_FEEDS[publication.lower()])
        return feed['entries']
    
    
    def get_weather(query):
        query = urllib.parse.quote(query)
        url = WEATHER_URL.format(query)
        data = urllib.request.urlopen(url).read().decode('utf-8')
        parsed = json.loads(data)
        weather = None
        if parsed.get('weather'):
            weather = {'description': parsed['weather'][0]['description'],
                       'temperature': parsed['main']['temp'],
                       'city': parsed['name'],
                       'country': parsed['sys']['country']
                       }
        return weather
    
    if __name__ == "__main__":
        app.run(host='0.0.0.0',port=8000, debug=True)
    
    

    home.html

    
    
    <html>
      <head>
        <title>Headlines</title>
        <style>
          html {
            font-family: "Helvetica";
            background: white;
          }
    
          body {
            background: lightgrey;
            max-width: 900px;
            margin: 0 auto;
          }
    
          #header {
            padding-top: 5;
            background: lightsteelblue;
          }
    
          #inner-header {
            padding-left: 10;
          }
    
          #main{
            padding-left: 10
          }
    
          input[type="text"], select {
            color: grey;
            border: 1px solid lightsteelblue;
            height: 30px;
            line-height:15px;
            margin: 2px 6px 16px 0px;
          }
    
          input[type="submit"] {
            padding: 5px 10px 5px 10px;
            color: black;
            background: lightsteelblue;
            border: none;
            box-shadow: 1px 1px 1px #4C6E91;
          }
    
          input[type="submit"]:hover{
            background: steelblue;
          }
    
          </style>   
        </head>
        <body>
          <div id="header">
            <div id="inner-header">
              <h1>Headlines</h1>
              <p>Headlines. Currency. Weather.</p>
            </div>
            <hr />
          </div>
          <div id="main">
            <h2>Current weather</h2>
            
            <form>
              <input type="text" name="city" placeholder="weather search">
              <input type="submit" value="Submit">
            </form>
            <p>City: <b>{{weather.city}}, {{weather.country}}</b></p>
            <p>{{weather.description}} |{{weather.temperature}}&#8451</p>
    
            <h2>Currency</h2>
            <form>
              from: 
              <select name="currency_from">
                {% for currency in currencies %}
                  <option value="{{currency}}" {{'selected="selected"' if currency_from==currency}}>{{currency}}</option>
                {% endfor %}
              </select>
              to: 
              <select name="currency_to">
                {% for currency in currencies %}
                  <option value="{{currency}}" {{'selected="selected"' if currency_to==currency}}>{{currency}}</option>
                {% endfor %}
              </select>
              <input type="submit" value="Submit">
            </form>
    
            1 {{currency_from}} = {{currency_to}} {{rate}}
            
            <h2>Headlines</h2>
            <form>
              <input type="text" name="publication" placeholder="search" />
              <input type="submit" value="Submit" />
            </form>
    
            {% for article in articles %}
              <b><a href="{{article.link}}">{{article.title}}</a></b><br />
              <i>{{article.published}}</i><br />
              <p>{{article.summary}}</p> 
              <hr />
            {% endfor %}
    
        </div>
      </body>
    </html>
    
    

    可爱的python测试开发库 请在github上点赞,谢谢!
    python中文库文档汇总
    [雪峰磁针石博客]python3标准库-中文版
    [雪峰磁针石博客]python3快速入门教程
    接口自动化性能测试线上培训大纲
    python测试开发自动化测试数据分析人工智能自学每周一练
    更多内容请关注 雪峰磁针石:简书

    • 技术支持qq群: 144081101(后期会录制视频存在该群群文件) 591302926 567351477 钉钉免费群:21745728

    • 道家技术-手相手诊看相中医等钉钉群21734177 qq群:391441566 184175668 338228106 看手相、面相、舌相、抽签、体质识别。服务费50元每人次起。请联系钉钉或者微信pythontesting

    python_flask_autotest5.PNG

    相关文章

      网友评论

        本文标题:雪峰磁针石博客]flask构建自动化测试平台5-提高用户体验

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