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.异常操作
