wushaojun 2018-08-16
书的代码有点旧,github地址的代码是新的,不过有的还是会报错,我觉得也有可能是作者用心良苦,因为找bug的时候,我学到了不少东西,23333。
1.书上不少代码都是基于 python manager.py shell来演示的。不过github的是基于Flask shell的,所以玩法要参考新手册
新代码里面主文件也没有manager.py,而是flasky.py
所以python manager.py shell就得换成这样的写法。
2.git 8b那个分支的代码,运行是报错的
说是查不到users表,看了下配置文件,默认运行是dev模式,dev模式下的sqlite文件都没有生成,不报错就奇怪了,要在app工厂里面加上db.create_all(),当然也可以在shell里面手动运行这个代码,放在工厂里面也没有关系,因为如果数据库文件已经存在db.create_all()什么都不会做的,至于会不会影响性能还不知道。
直接加db.create_all() 报错: No application found. Either work inside a view function or push an application context.
那肯定是没有上下文了。
可以用with app.app_context()或者app_context.push()的方法来引入上下文。
不过push的方法是要注意的,每次app.app_context()返回的上下文是不同的对象,并不是单例,所以要有一个变量才存储它,用完pop,而不能这样:
正确的是:
这样就不会有什么问题。
3.待续。