學習python flask之七:使用Gravatar給profile頁添加頭像

本文將增加用戶的profile頁。profile頁一般是用戶自己提交的關於自己的信息,比如頭像,生日等等。本文將為所有用戶動態生成profile頁,並允許用戶自己編輯。這裡頭像使用Gravatar提供的服務,這樣我們的應用就不需要自己儲存用戶的頭像圖片,可以極大節省我們自己的應用所佔的空間,對小應用來說非常推薦。


下面的代碼用來創建profile頁,並映射到/user/的URL上。

學習python flask之七:使用Gravatar給profile頁添加頭像

簡單解釋一下:@app.route聲明瞭一個動態URL,即username是個變量,它由函數user的入參決定。user是從數據庫中根據用戶名查詢到該用戶的記錄,然後創建兩個post,用於測試使用。真正的實現時,需要通過user來查詢它的post內容,這部分以後再實現。@login_required前一篇文章剛介紹過,表面該頁面必須再用戶登錄之後才能顯示。first_or_404()在能查詢到用戶時與first()的功能一樣,當查詢不到用戶時,返回404 err頁面。

根據上述代碼,我們應該添加一個模板user.html。

學習python flask之七:使用Gravatar給profile頁添加頭像

另外,我們可以添加一個鏈接,這樣用戶才可以訪問到profile頁。

學習python flask之七:使用Gravatar給profile頁添加頭像

通過上述幾行代碼,profile頁面就實現了。但是都是些文本信息,我們需要加入頭像。一種方法是在服務器上儲存用戶提交的大量圖片,另一種方法是使用Gravatar服務來給用戶提供圖片。Gravatar服務很容易使用。當為一個用戶請求圖片時,URL使用這樣的格式:https://www.gravatar.com/avatar/; 這裡hash是對用戶的email地址進行MD5哈希計算的結果。

>>> from hashlib import md5

>>> 'https://www.gravatar.com/avatar/'; + md5(b'[email protected]').hexdigest()

'https://www.gravatar.com/avatar/d4c74594d841139328695756648b6bd6'; #這就是返回的結果。

這樣做的好處是服務器不需要存儲圖片,缺點就是延長了網頁的響應時間,特別在網絡環境較差時。

一般來說gravatar返回的圖片是80*80尺寸的,如果想返回其他尺寸的,需要添加s參數。例如https://www.gravatar.com/avatar/729e26a2a2c7ff24a71958d4aa4e5f35?s=128.

由於頭像是與用戶相關的,我們就必須添加產生頭像的代碼。

學習python flask之七:使用Gravatar給profile頁添加頭像

生成了圖片之後,就需要把該圖片顯示在profile頁面上,如下所示:

學習python flask之七:使用Gravatar給profile頁添加頭像


分享到:


相關文章: