(根據居然老師直播課內容整理)
詳見:flask專案1實戰:2.2 flask框架下使用驗證碼
選項方案
請求方法
post
請求位址
/users
引數名型別
是否必傳
說明password
string是密碼
password2
string
是確認密碼
mobile
string
是手機號
sms_code
string
是簡訊驗證碼
響應結果
響應內容
註冊失敗
響應錯誤提示
註冊成功
重定向到首頁
業務邏輯驗證
檢查手機號是否註冊過:傳送簡訊驗證碼時已驗證過,可以不驗證,(如果該欄位不是unique,建議還是驗證一下,因本次該段是unique,新增資料時,如果重複會報錯,故此處可不驗證,在儲存資料時捕獲異常)
密碼加密:
將註冊資訊寫入資料庫
儲存登入狀態到session中
返回結果
@api.route(
"/users"
,methods=
["post"])
defregister()
:"""
註冊:param: 手機號 簡訊驗證碼 密碼 確認密碼
:return: json
"""# 接收引數
request_dict = request.get_json(
) mobile = request_dict.get(
"mobile"
) sms_code = request_dict.get(
"sms_code"
) password = request_dict.get(
"password"
) password2 = request_dict.get(
"password2"
)# 驗證
ifnot
all(
[mobile, sms_code, password, password2]):
return jsonify(errno=ret.paramerr, errmsg=
'引數不完整'
)# 判斷手機號格式
ifnot re.match(r'1[345678]\d'
, mobile)
:return jsonify(errno=ret.paramerr, errmsg=
'手機號格式錯誤'
)# 判斷兩次密碼是否一致
if password != password2:
return jsonify(errno=ret.paramerr, errmsg=
'兩次密碼不一致'
)# 業務邏輯
# 從redis取簡訊驗證碼
try:
real_sms_code = redis_store.get(
"sms_code_%s"
% mobile)
except exception as e:
logging.error(e)
return jsonify(errno=ret.dberr, errmsg=
'讀取簡訊驗證碼異常'
)# 判斷簡訊驗證碼是否過期
if real_sms_code is
none
:return jsonify(errno=ret.nodata, errmsg=
'簡訊驗證碼失效'
)# 刪除redis中的簡訊驗證碼
try:
redis_store.delete(
"sms_code_%s"
% mobile)
except exception as e:
logging.error(e)
# 判斷使用者填寫的驗證碼的正確性
real_sms_code=real_sms_code.decode(
)if sms_code.lower(
)!=real_sms_code:
return jsonify(errno=ret.dataerr, errmsg=
'簡訊驗證碼錯誤'
)# 判斷手機號是否存在
try:
user = user.query.filter_by(mobile=mobile)
.first(
)except exception as e:
logging.error(e)
else
:if user is
notnone
:# 表示手機號已經被註冊過
return jsonify(errno=ret.dataexist, errmsg=
'手機號已經存在'
)# 儲存資料(同時檢測手機是否被註冊過)
user = user(name=mobile, mobile=mobile)
user.passwd_hash(password)
try:
db.session.add(user)
db.session.commit(
)except integrityerror as e:
db.session.rollback(
) logging.error(e)
return jsonify(errno=ret.dataexist, errmsg=
'手機號已經存在'
)except exception as e:
# 回滾
db.session.rollback(
) logging.error(e)
return jsonify(errno=ret.dberr, errmsg=
'插入資料庫異常'
)# 儲存登入狀態到session中
session[
"name"
]= mobile
session[
"mobile"
]= mobile
session[
"user_id"
]= user.
idreturn jsonify(errno=ret.ok, errmsg=
'註冊成功'
)
flask專案1實戰 3 使用者登入 待完善
根據居然老師直播課內容整理 選項方案 請求方法 post 請求位址 sessions 引數名型別 是否必傳 說明mobile string 是手機號 password string是密碼 字段說明 登入失敗 響應錯誤提示 登入成功 重定向到首頁 判斷業務邏輯處理 儲存狀態 返回 lghome api...
flask 使用者註冊 密碼加密
名為passport.py 依舊存在 密碼為加密以及建立使用者時沒有傳入密碼的問題。from import api from ihome.utils.response code import ret from ihome import redis store,db from ihome.models...
yii2實戰之使用者註冊登入
繼控制器與檢視互動,本篇將講解如何自定義全域性函式,以及使用yii自帶的使用者註冊登入功能 有時候我們希望自定義一些函式,可以在全域性中呼叫,如php預設的var dump在頁面上的顯示效果並不好,尤其是多層級陣列的情況下,一大坨資料很難分辨。對此,yii提供了vardumper助手,可以輸出美觀易...