目錄
前言
第1章-第7章學習實踐記錄請參見:《Flask Web開發——基於Python的Web應用開發實踐》一字一句上機實踐(上)
本文記錄自己學習《Flask Web開發——基於Python的Web應用開發實踐》的第8章-第14章內容。相比於剛開始學習第1-7章內容來說,本部分內容實戰性更強,而且在書本上遇到的問題也相對較少,如果認真弄懂前7章內容的話,本部分內容相當於是對前7章內容的具體實踐,學習也很輕松。
首先說明一下本部分項目示例實現了哪些功能?
- 用戶角色:普通用戶、管理員
- 具體功能:登陸、注冊、發布文章、編輯文章、用戶間關注、用戶評論、修改個人信息、管理用戶評論、MarkDown顯示文章格式。
下圖中所示為一個管理員角色登陸系統各部分功能圖片動態圖:
我自己上機演練代碼:(PS:和作者GitHub上代碼有些許區別)
第8章 用戶認證
1.書本79頁密碼散列功能shell測試有bug
如果學完第7章,並按照71頁manage.py中寫入啟動腳本代碼,在控制台輸入python manage.py shell會報以下錯誤:TypeError: <flask_script.commands.Shell object at 0x0000000004E29668>: 'dict' object is not callable
解決辦法如下圖:
緊接着,如果還是安裝書本上命令提示輸入命令,會報以下錯誤:Traceback (most recent call last):File "<console>", line 1, in <module>
解決辦法見下圖:
2.書本87頁用shell插入新用戶數據有bug
本問題在於數據庫設計含有外鍵,直接按照書中插入代碼,未插入用戶角色外鍵,是無法插入數據的。
解決辦法:刪除User表和Role表之間的多對一關系
然后,刪除項目中所有**.sqlite文件和migrations文件夾,具體如下:
然后按照下圖所示三步,重新創建數據庫(PS:此處方法見第5章5.11節):
這些處理完畢后,依照書上插入代碼,依舊會報找不到User和db錯誤,解決辦法如下:
完成以上數據插入任務后,在CMD控制台輸入python manage.py runserver開啟服務,瀏覽器中輸入http://127.0.0.1:5000/auth/login,然后用插入的郵箱號和密碼進行登陸,會得到如下結果:
3.書本89頁實際運行結果(PS:經驗證,數據可以注冊成功)
4.書本92頁執行一個新的數據庫遷移
在CMD窗口中,依次輸入python manage.py db migrate -m “the second migration”、python manage.py db upgrade命令,具體執行以及得到結果如下:
5.書本94頁示例8-22代碼因為Flask-Login版本問題出現如下圖所示bug
解決辦法見下圖:
讓我疑惑的是,我寫筆記時看的是實體書,上面代碼有問題,下面截圖的是電子書,上面卻是正確的>~<,具體如下:
問題解決方案網址(https://segmentfault.com/q/1010000004041497)
測試is_authenticated方法如下:
附加書本95頁頁面運行結果:
出現上圖的原因:
花了一個多小時找錯,結果發現是自己照着書本83頁敲示例8-8代碼時少了return語句,直接寫User.query.get(int(user_id)),具體如下:
解決來源(https://github.com/maxcountryman/flask-login/issues/302):
運行成功界面如下:
下面是我自己修改數據庫數據中郵箱驗證屬性為True時顯示結果(PS:主要在於郵箱驗證時需要申請臨時密碼,所以就沒填寫具體郵箱數據,直接手動改寫后台數據庫中數據):
注:第8章主要講解了如何使用Flask框架實現用戶登陸、注冊功能,以及使用郵箱進行用戶注冊確認以及密碼修改確認等。感覺第8章內容就是對書本前7章內容的一次綜合練習,所有使用的技術點都可以在前7章中找到。所以,個人感覺只要踏實把第8章所有代碼以及實現思路弄懂,才算是剛剛入門Flask框架。
第9章 用戶角色
1.書本99頁使用shell會話把角色寫入數據庫問題
由於在第8章實現過程中,我把Role表和User表之間的外鍵關系給刪除了,如果在這章不重新回復兩表之間的關系就無法實現用戶角色的功能。所以,在這種情況下,我又得要把數據庫重新初始化、遷移和創建。之所以這么做,而不是直接進行遷移和創建,是因為我在直接進行遷移和創建的過程中,報錯:default屬性在框架中已經存在,無法創建新的Role表,這個錯誤沒有解決,由於初學,無奈,直接刪除migrations文件夾和生成的data-dev.sqlite數據庫文件,重新進行初始化、遷移和創建,發現一切OK。具體如下:
好了,既然Role表和User表之間有了一對多而存在的外鍵關系,那注冊功能插入用戶數據時,必須得要確認用戶角色,否則無法插入。
剛剛進行了注冊測試,竟然不用確定用戶角色,也可以插入成功。這樣的感覺違背了我學習數據庫的理論知識啊,之前第5章,進行插入數據時,行不通,現在好了。估計是之前學習時,代碼有點bug。
注:本章相當於主要在講數據庫的知識,和本書核心Flask框架的知識點聯系不大,其中核心思想就是定義權限來分配角色等級。一個用戶有的只有一種權限,有的可以有多種權限。權限的分配很靈活,這樣處理操作大大簡化了數據庫的設計難度,也提高了數據的條理性。
第10章 用戶資料
1.書本105頁、107、109頁和112頁操作運行結果
此處按照書本上的代碼講解,進行編寫代碼操作,其中遇到的問題在前面均已遇到過,所以到了此處基本沒啥難點。按照書本講解,運行結果具體如下:
用戶簡介頁面
普通用戶修改個人信息界面
管理員修改個人信息界面
顯示用戶頭像的資料頁面
注:本章主要實現博客系統普通用戶和管理員角色的個人信息編輯功能實現,此處實現沒有什么技術亮點和難點,只要認真完成書本前述部分,這部分功能完全沒有障礙。
第11章 博客文章
1.有關書本119頁示例11-8代碼
本部分代碼在作者GitHub上沒有示例代碼,即如果要實現導入虛擬數據測試功能,只能自己一個代碼一個代碼敲。不過,這個也太多了點,一個字母出錯就要改錯>~<。從作者GitHub上直接克隆下來的代碼,雖然沒有示例代碼,但是應該是作者更新代碼后,在此處換了另一種實現方式,因為在項目文件中出現了一個新的fake.py文件,該文件中代碼和示例11-8代碼基本類似。
2.書本117頁、123頁、125頁和130頁操作運行結果
注:本章是對博客系統功能的擴展,主要實現用戶編輯發送博客文章,其中還可以使用MarkDown來實現對文章的編輯。功能具體實現參照書本的代碼講解即可,基本不會遇到什么較難的問題。
第12章 關注者
1.書本137頁和142頁實際運行結果
2.操作完第12章代碼后,如果選擇用戶退出,可能會出現以下bug:AttributeError: 'AnonymousUser' object has no attribute 'followed_posts'
解決辦法,在models.py文件中找到AnonymousUser類,在這個類中添加一個方法,具體代碼如下:
@property def followed_posts(self): return Post.query.join(Follow, Follow.followed_id == Post.author_id) \ .filter(Follow.follower_id == None)
注:本章具體實現部分的難點是關注用戶記錄的數據庫表的設計,即多對對關系會生成一張中間表。其它部分,按照書本上的代碼來上機操作,基本不會遇到什么難點。
第13章 用戶評論
1.書本148頁和151頁實際上機運行結果
注:本章主要實現博客的用戶評論功能,以及添加了一個協管員權限,具體實現沒有什么難點,按照書本的代碼上機操作即可。
第14章 應用編程接口
1.書本168頁測試打印結果
此處具體操作需要先在CMD中打開服務,才能獲取api中數據。(PS:推薦一篇博客:http://blog.csdn.net/huang5487378/article/details/60778293)
運行結果: