乙個web應用的誕生 6 使用者賬戶

2022-02-11 07:18:27 字數 2897 閱讀 8105

之前登入註冊的功能都已經完成,但是登入成功回到首頁發現還是白茫茫的一片,對的,title一直都寫得部落格,那麼最終目的也是寫出乙個輕部落格來,但是,在發表文章之前是不是要先記錄一下登入狀態呢?

登入狀態的記錄方式有很多種,首先想到的應該就是使用flask自帶的session,但flask還提供了一種更方便的擴充套件,即flask-login包,使用方式還和之前一樣,首先需要安裝:

pip3.6 install flask-login
然後在default.py中進行初始化:

from flask.ext.login import loginmanager

......

login_manager=loginmanager()

login_manager.session_protection="strong" #可設定為none,basic,strong已提供不同的安全等級

login_manager.login_view="login" #設定登入頁

然後按照需求對user模型進行修改,因為flask-login要求user模型必須實現四個方法,分別為:

is_authenticated() 判斷是否登入,登入返回true,否則返回false

is_active() 是否允許登入,即使用者是否已被禁用,如禁用返回false

is_anonymous() false為普通使用者

get_id() 返回使用者唯一識別符號,使用unicode編碼

這四個方法在user模型中直接實現即可,但是還有一種更簡單的方式,即繼承flask-login提供的usermixin類,它裡邊包含了這些方法的預設實現,修改後的user模型為:

from flask.ext.login import usermixin

class user(usermixin,db.model):

__tablename__="users"

id=db.column(db.integer,primary_key=true)

......

flask-login還要求程式實現乙個**函式,已使用指定的識別符號家在使用者:

@login_manager.user_loader

def load_user(user_id):

return user.query.get(int(user_id))

之後,就可以方便的使用flask-login框架,繼續修改首頁模板的導航部分,以便顯示使用者名稱及相應資訊:

牛部落格 

牛部落格

這裡新出現url_for方法,它的主要功能是使用程式中的資訊生成url,比如傳入檢視的方法名,生成對應的url,還可以通過方法的動態引數生成url的引數,如url_for('index',age=5)結果為/?age=5

主要內容為判斷是否登入,若登入顯示 }你好,並提供登出功能,否則顯示登入鏈結。

修改登入表單:

class loginform(form):

username=stringfield("請輸入使用者名稱",validators=[datarequired()])

password=passwordfield("請輸入密碼")

remember_me=booleanfield("記住我")

submit=submitfield("登入")

增加記住我專案, booleanfield預設為多選按鈕

修改登入檢視方法:

def login():

form=loginform()

if form.validate_on_submit():

username = form.username.data

password = form.password.data

user = user.query.filter_by(username=username, password=password).first()

if user is not none:

login_user(user,form.remember_me.data)

return redirect(url_for("index"))

else:

flash("您輸入的使用者名稱或密碼錯誤")

return render_template("/login.html",form=form) # 返回的仍為登入頁

return render_template("/login.html",form=form)

其中login_user為flask_login外掛程式提供,用於設定使用者登入,其中第二個引數即為記住我選項,若輸入true,則提供cookie儲存狀態,否則關閉瀏覽器狀態即取消

新增登出方法:

@login_required

def logout():

logout_user()

return redirect(url_for("index"))

此方法很簡單,直接使用flask-login提供的登出方法即可,注意@login_required裝飾器表示,只有登入使用者才可訪問此檢視方法。

點選右上角的登入鍵:

輸入使用者名稱zhangji 密碼123 並選擇記住我,點選確定:

注意紅線部分,顯示正常,此時點選登出:

注意紅線部分,回到初始狀態。

接下來本來應該是發帖及關注功能,但很明顯,現在**都在default.py中,對於**結構越來越力不從心,所以本章的篇幅比較小,下一章將重點對已有**進行重構,並對功能進行分組,然後在繼續寫接下來的功能。謝謝**。

乙個 PWA 的誕生

本文可以提前讓大家熟悉 pwa 搭建,文中提到的配置來自乙個 redesign 的 nipponcolors,最近才做好的,使用的各種庫都是現在 2018.09.14 最新的,可用的,另外本文不討論應用功能,單純講講 pwa 的搭建。vue cli3 與 2 的區別挺大的,3 預設搭建工程並非像 2...

乙個激情任務的誕生

時間線 2014年 assert這個東西,在前年c 的 中,我偶然一瞥,不以為意,略懂而過 時間線 2015年年底 去年年底,需要為重構的專案新增單元測試,好嘞,就私下來試試,淺嚐很易,便不以為意,現在忘記了是什麼原因,隔了幾天拉著lll到隔壁小黑屋,耗時一天半,在網上不斷查,深入去研究單元測試 深...

乙個程序的誕生與死亡

createprocess啟用的。2.產生乙個程序核心物件,計數值為1 3.系統為此程序建立乙個4gb位址空間 5.系統為此程序建立乙個執行緒,稱為主線程。執行緒才是cpu時間的分配物件。6.系統呼叫c runtime函式庫的startup code 10.回到startup code 11.回到系...