標籤:資料庫表 att migrate art trace 頁面 任務 發布 das
目錄
前言
第8章 使用者認證
第9章 使用者角色
第10章 使用者資料
第11章 部落格文章
第12章 粉絲
第13章 使用者評論
第14章 應用編程介面
前言
第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類,在這個類中添加一個方法,具體代碼如下:
@propertydef 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)
運行結果:
《Flask Web開發——基於Python的Web應用開發實踐》一字一句上機實踐(下)