ch7 Section 3: love u all
这一次的作业不仅迟了两天才交,而且在不同阶段得到了三位教练同学的悉心耐心指导,作为小白我除了感慨自身自带属性掉坑爬坑功力深厚外,真的是深感荣幸。没关系,不能独立完成也就认了吧,抱大腿就抱大腿吧,能够得到你们不厌其烦的讲解,是我本次最大收获之一。
这次总共三个大坑(小坑就别提了),各自攻略稍微说一下:
1.搭建平台。
新浪云各种坑,转向了阿里云。开始配置也是踩雷不少,还写了份工单,需要提醒的是那个网址和端口,应该如以下格式(网页打开仍是公网IP地址):
if __name__ == '__main__':
app.run(host='0.0.0.0',port='80')
其他安装问题在梁教练指导下顺利进行,此外,我突然发现,其实如果真有什么搞不懂的,其实写工单把问题描述清楚直接问阿里云的程序猿,还蛮好使滴...包括网络配置和各种小技术问题(这是小白用户的智慧....),然后交了工单可在微博上@一下,很快回复~
其实ch6作业完成后,在微信并不能打开,于是当得知ch7需要重新部署云平台时,我内心是相当崩溃的。因为这等于是重新再做一遍ch6 + ch7。
第一步是采用新浪云的sae,纳尼?居然,只能选python2.7版本? 我有非常不祥的预感。。。 中间新浪云各种坑就略过不说,总之当申请了第二个新浪云账号,然后有一次无论如何都登陆不了,我就觉得:够了!
愤而转向钙瓷同学推荐的传说中可以各种 install 各种 import 等于又拥有了一台新电脑的阿里云。当然了,部署开发环境中又是各种坑,多谢梁培利教练的耐心和专业指导。
2.阿里云选的是 linux系统,然后还要新学命令,头大...幸好我有教练。
问:怎么删除云服务器的文件夹?
答:研究下rm -r 这条命令。
问:现在我退出云服务器这个网站就不能打开对吗,还要研究怎么一直挂着这网站, 我查了关键词是不是包括 flask uwsgi nginx
答:nohup 命令可以挂起在后台,这样退出服务器后也能一直运行
等等...
没学会怎么删除云服务器的文件夹,用 scp -rf 覆盖没成功,然后我就简单粗暴的在云端一口气创建了13个文件夹!每次修改就push一个,居然还不够用...后来大猫告诉我直接 scp -r就能覆盖。好像是这样。
还有一个很小白的做法我居然每次push和登陆云服务器都用同一个终端,每次shutdown再重新登陆再修改再push再登陆再退出各种折腾在教练提醒下才懂得用两个终端,一个本地一个云端(我居然连这个说出来了...),噢,还有一个sha1写成 shal 自己挖的坑~
切记:输入exit来退出终端,不能在nohup执行成功后直接点关闭程序按钮关闭终端。
3.微信的Token认证。
关键在于 Token 验证错误其实是路由问题,要确保服务器上运行的程序走wechat路由。要弄懂路由和浏览器输入地址的关系。
@app.route('/wechat', methods=['GET'])
“填写服务器配置”这个坑踩了好久好久好久好久好久,梁教练连续两三天晚上10点下班后还要答复我各种幼稚小白问题,真是辛苦啊(我也没办法..),坚持到最后实在被我各种报错弄得不忍心甩了一段虽然没几个字但非常关键的代码给我~~验证成功!!顺带一提梁教练深夜在我各种轰炸下还坚持循循善诱,一边解决问题一边引导思考,让人惊叹~~~
4.写一个函数接收处理然后封装返回XML数据包
写一个函数,处理以下事项:解析微信发过来xml格式的请求(也就是用户输入的查询城市名),先解析,解析出城市名,调用接口查询天气,返回的数据用content接收,再组装成微信的xml返回。
这部分的逻辑,当然不是我自己想通的,我只会吐槽~xml这种毫无人性的信息格式解析和封装,大猫同学,毫无疑问!!再一次现身了...
如果可以评选优秀学员,我想把我所有的票都投给耐心又认真,善良又可爱的大猫同学!!好高兴我可以继续跟他做大作业啊~(我尽量不拖后腿...)
其中关于怎么接收微信信息那一块想了好久,其实用 methods=['POST'] 和 request.get_data() 就好了,flask 不熟啊!!活该我绕了半天迷失在代码森林啊。
@app.route('/wechat', methods=['POST'])
def wechat_msg():
msg_xml = request.get_data()
root = ET.fromstring(msg_xml)
然后这个 data_xml = {} 是字典形式,我也不是很明白,官方文档也没怎么写,只看到范例 root.attrib = {} 这一行而已。 你们是怎么飞跃到认为可以用字典形式去接收啊,小白实在理解无能... 总而言之,当我痛苦万分研究了 global 这种全局变量、web.py 这个看起来好像很好用以为是简洁明了的模块准备import进来(教练后来告诉我这是个flask一样的框架)和准备入坑用 class 方法来写这个函数时,大猫同学及时的把我从坑里提了起来(泪目)。
好了,先写这么多,我得赶紧想想大作业了...
0309 update:
我发了issue ,关于微信公众号成功部署后,又突然不能查询一事。 issue
用ps -ef | grep python3 以及 netstat -nltp 检查阿里云服务器端口情况,好像没什么问题?

faketoothe:
有可能是因为有人给你输入了中文城市,代码出了异常,自己挂掉了. 做try except异常处理 或者,用gunicorn 或者tornado 之类的容器框架运行你的web,强行无视这个问题.
so ...