實現登入 Flask 實現登入功能

2021-10-25 12:26:16 字數 3296 閱讀 3085

在大多數人學習 web 開發的路線圖中,登入功能往往是我們接觸到的第乙個功能,本文對 flask 實現登入功能做乙個簡單的介紹。

需求的分析往往是實現的第一步,在對 flask 的登入功能進行編碼 demo 之前,有必要先介紹一下登入模組的功能列表和基本流程。

乙個登入功能主要要實現如下幾個基本的功能點:

註冊新使用者到資料庫

判斷乙個登入請求是成功還是失敗,即登入功能

登入狀態的保持

實現上述功能的基本流程如下:

下面給出上述功能的簡單的實現。這裡需要用到 flask-sqlalchemy 模組以訪問資料庫,有關 flask-sqlalchemy 的介紹在這裡:

我們繼承了 sqlalchemy.model 類來實現乙個 user 類:

**如下:

from flask_sqlalchemy import sqlalchemy

db = sqlalchemy()

class user(db.model):

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

username = db.column(db.string(24), nullable=false)

password = db.column(db.string(24), nullable=false)

def __init__(self, username, password):

self.username = username

self.password = password

註冊功能和 flask_login 沒有關係,只需要將登錄檔單中的資料提交到資料庫即可,**如下:

def register():

proto = request.get_json()

# 判斷是否已經註冊,如果已經註冊,則返回已經註冊的資訊

if user.query.filter_by(username = proto["username"]).first():

return jsonify()

else:

db.session.add(user(**proto))

db.session.commit()

return jsonify()

return jsonify()

我們採用 token 的方式來實現登入功能,我們在使用者請求資料報中提取 username 和 password,然後在資料庫中進行查詢,如果查詢到了這個使用者,那麼我們就給前端返回乙個 token,前端會記錄這個 token,當前端需要鑑權的時候,將該 token 放入到資料請求當中,就可以訪問收到保護的內容:

我們使用 jwt 庫來實現 token 的編碼和解碼,**如下:

def token_encode(**kwargs):

return jwt.encode(kwargs, secret_key, algorithm='hs256')

def decodeauthtoken(token):

try:

payload = jwt.decode(token, secret_key, algorithms=['hs256'])

if payload["username"] == request.get_json()["username"]:

return decodetokenstate.success

return decodetokenstate.invalidtokenerror

except jwt.expiredsignatureerror:

return decodetokenstate.expiredsignature

except jwt.invalidtokenerror:

return decodetokenstate.invalidtokenerror

借鑑 flask-login 模組,我們也實現乙個 login_required 裝飾器,這樣每次需要訪問私密內容的時候,我們只需要在路由函式上加入 login_required 裝飾就可以了。

def login_required(func):

@wraps(func)

def decorated_view(*args, **kwargs):

proto = request.get_json()

if decodeauthtoken(proto["token"]) == decodetokenstate.success:

return func(*args, **kwargs)

return jsonify()

return decorated_view

登入的路由如下:

def login():

proto = request.get_json()

user = user.query.filter_by(username=proto["username"], password=proto["password"]).first()

if user:

token = token_encode(**)

return jsonify()

return jsonify()

假如我們需要訪問乙個使用者的 todolist,我們就在前面加入裝飾器,例項**如下:

@login_required

def todolist():

proto = request.get_json()

return "todolist"

(完)彩蛋:在最開始寫這篇 blog 的時候,是想採用 flask-login 庫來進行說明,但是到在自己進行試驗的過程中,發現 flask-login 要和 flask 提供的渲染模板 jinja2 配合使用。這和我準備後續進行學習和討論的前後端分離(react+flask)的方案不太吻合,因此選擇以 token 的方式來實現乙個登入功能。如果有同學基於 flask-login 實現了前後端分離的登入,真誠的希望可以和你討論~

php實現登入功能

開始自然是從最簡單的功能起步,我第乙個任務選擇了做乙個登入操作,其實也沒想象中那麼簡單。1.首先自然是連線和建立資料庫 這部分我寫在model.php中 username root password host localhost database login 建立連線 conn mysqli con...

iOS PHP實現登入功能

在開發過程中,也是碰到了各種各樣的問題,經過不斷的除錯和改變方法,終於將所有的坑都基本上填滿了,因此,將最終完整版的 及相關流程記錄在此,供自己及其它需要的人查閱使用。一 一些約定條件 當在裝有win 7系統的電腦上配置伺服器時,我使用的是wamp整合軟體,資料庫和表的編輯操作使用的是sqlyog軟...

Django 實現登入功能

使用者能註冊賬戶之後,接下來要讓使用者能夠登入。為此,要執行以下幾步 定義乙個檢視,處理登入憑據 建立乙個模板,顯示登入表單 把登入檢視對映到乙個 url 上 在首頁新增登入鏈結 定義登入檢視 首先,開啟 rango 應用的 views.py 模組,定義乙個新檢視,名為 user login 這個檢...