2017年3月25日15:28:30

开始添加“更正功能”。

回想起上周六压力山大的时候的郁闷,以及上午将问题解决之后的畅快。想必有时候人的历事过程均是如此,一件事情的通路非常之多,但于不同人而言有不同:

  • 同样一件事情,对于A来说非常困难,对于B来说可能非常简单。
  • A与B在该事方面的积累不同,便好理解。
  • A与B在该事方面的积累相同,这个时候不同的困难度就体现在了心理能力之上。
  • A与B在该事方面的积累相同,心理能力相同,则与一个人的随机表现有关。

如果将这种解决问题依赖的能力抽象出来,结合阳师提到的元技能,那么我会这样划分:

  • | 技能知识 |
  • | 元技能(高效方法) |
  • | 精神能量(信仰、信念) |

每一个层次均有它的经验。因此,做一件事情,一要有信心,二要有方法,三要争取外界条件去学习。如此方能做到其他多数人都能办得到的事情,如果要做第一人则需要想人之所未想,跑在他人前面,也就是所谓的创新思维。

2017年3月25日15:46:22

扯远了,继续添加更正功能的作业。

优化查询

想到优化查询之考虑到用户重复查询的情况:

  • 在用户查询了一个城市的数据之后将其保存在数据库当中。
  • 下一次查询时,先在数据库当中查找,如果能够找到直接返回天气数据。
  • 否则,再通过API进行远程查询。

优化时尝试将API调用封装在一个函数当中,比如:

def fetch_api(city):
    if city == None or city == '':
        return "OOPS...请输入查询城市。"

    result = requests.get('https://api.thinkpage.cn/v3/weather/now.json', params=
    {'key': 'd8u4dbx8dg5bhz5q', 'location': city,})
    return json.loads(result.text)

然后调用如下:

def query_weather():
    city = request.args.get('query_city')
    parsed_result = fetch_api(city)

    if parsed_result.has_key('results'): # 错误发生。
        weather = parsed_result['results'][0]['now']['text']
        store_db(location, weather)
        return (location + u"今日天气: " + weather).encode('utf-8')

然而执行到if parsed_result.has_key('results')语句时会发生错误:

File "D:\Learning\git\Py103\Chap5\project\OnlineWeatherQuery2.0\application.py", line 52, in query_weather
  if parsed_result.has_key('results'):
AttributeError: 'str' object has no attribute 'has_key'

错误提示表明当前的parsed_result并没有has_key属性,这是不是算Python当中没有返回值类型的一个缺陷,但与本身所追求的简洁程度相比,也还好对不对?

之后在给fetch_db()传入参数的时候总是提示如下错误:

File "D:\Learning\git\Py103\Chap5\project\OnlineWeatherQuery2.0\application.py", line 71, in fetch_db
   cur.execute('SELECT * FROM LocalWeather WHERE City=?', (city))
ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 2 supplied.

尝试了好多次,最终在搜索时候stackoverflow的一篇问答给出了解决方法。

web界面优化

2017年3月25日17:03:41

2017年3月26日09:51:56

界面优化需要修改html,添加“更正”按钮,悲催的是看起来index.html, help.html, history.html以及query_result.html几个都要分别更新,会做许多重复工作,那有没有其他可以避免这种重复性工作的方法呢?

先不管这个优化,把功能实现了再说。于是在form里面新增代码:

<form style="text-align:center;" action="/user_request" method="get">
  城市:
  <input type="text" name="query_city">
  <input type="submit" name="query" value="查询">
  <input type="submit" name="update" value="更正"> # 新增代码。
  <input type="submit" name="history" value="历史">
  <input type="submit" name="help" value="帮助">
</form>

除此之后还需要在help.html里面添加有关“更正”功能的说明。另外,还需要在Server端添加针对update操作的处理函数。简单测试后通过。

添加“更正”逻辑

2017年3月26日10:35:07

更正逻辑的部分需要两处修改:一、针对对更新信息的解析;二、更新数据库。

更正信息的解析上需要解析出城市与天气,并对天气做简单的校验工作。解析的操作参照Chap1当中的内容使用split函数完成对于用户输入的“更正信息”的解析,而校验操作采用列表判断。

在更新数据库的时候想到在执行UPDATE之前最好先知道该城市对应的天气数据是否存在,如果存在则update,不存在则提示错误。最终的方案是延迟判断:即直接执行UPDATE操作,如果之前存在那么是可以成功的,如果不存在,那么会失败。当时有些纠结于怎么判断UPDATE的操作成功,之后在stackoverflow上找到答案。到这里基本的功能均已实现。

操作演示

1.帮助信息

2.天气查询

3.天气更新

4.异常操作

results matching ""

    No results matching ""