在大多數人學習 web 開發的路線圖中,登入功能往往是我們接觸到的第乙個功能,本文對 flask 實現登入功能做乙個簡單的介紹。
需求的分析往往是實現的第一步,在對 flask 的登入功能進行編碼 demo 之前,有必要先介紹一下登入模組的功能列表和基本流程。
乙個登入功能主要要實現如下幾個基本的功能點:
註冊新使用者到資料庫
判斷乙個登入請求是成功還是失敗,即登入功能
登入狀態的保持
實現上述功能的基本流程如下:
下面給出上述功能的簡單的實現。這裡需要用到 flask-sqlalchemy 模組以訪問資料庫,有關 flask-sqlalchemy 的介紹在這裡:
我們繼承了 sqlalchemy.model 類來實現乙個 user 類:
**如下:
註冊功能和 flask_login 沒有關係,只需要將登錄檔單中的資料提交到資料庫即可,**如下: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
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 的編碼和解碼,**如下:
借鑑 flask-login 模組,我們也實現乙個 login_required 裝飾器,這樣每次需要訪問私密內容的時候,我們只需要在路由函式上加入 login_required 裝飾就可以了。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
登入的路由如下: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 這個檢...