1. 程式人生 > >《Flask Web開發——基於Python的Web應用開發實踐》一字一句上機實踐(下)

《Flask Web開發——基於Python的Web應用開發實踐》一字一句上機實踐(下)

屬性 一個用戶 臨時 target 說明 實戰 分享圖片 ace 庫文件

目錄

前言

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類,在這個類中添加一個方法,具體代碼如下:

@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)

運行結果:

技術分享圖片

技術分享圖片

《Flask Web開發——基於Python的Web應用開發實踐》一字一句上機實踐(下)