1. 程式人生 > >《Flask Web開發》這本書中的一些坑

《Flask Web開發》這本書中的一些坑

書的程式碼有點舊,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.待續。