flask專案1實戰 2 使用者註冊 待完善

2021-10-10 22:23:51 字數 3362 閱讀 4334

(根據居然老師直播課內容整理)

詳見: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助手,可以輸出美觀易...