flask專案1實戰 3 使用者登入 待完善

2021-10-11 05:19:28 字數 3956 閱讀 8576

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

選項方案

請求方法

post

請求位址

/sessions

引數名型別

是否必傳

說明mobile

string

是手機號

password

string是密碼

字段說明

登入失敗

響應錯誤提示

登入成功

重定向到首頁

判斷業務邏輯處理

儲存狀態

返回

# lghome/api_1_0/passport.py

@api.route("/sessions", methods=["post"])

def login():

"""使用者登入

:param: 手機號,密碼

:return: json

"""# 接收引數

request_dict = request.get_json()

mobile = request_dict.get('mobile')

password = request_dict.get('password')

print(mobile,password)

# 校驗引數

if not all([mobile, password]):

return jsonify(errno=ret.paramerr, errmsg='引數不完整')

# 判斷手機號格式

if not re.match(r'1[345678]\d', mobile):

return jsonify(errno=ret.paramerr, errmsg='手機號格式錯誤')

# 判斷業務邏輯處理

# 從資料庫查詢手機號是否存在

try:

user = user.query.filter_by(mobile=mobile).first()

except exception as e:

logging.error(e)

return jsonify(errno=ret.dberr, errmsg='獲取資訊失敗')

# 驗證密碼

if user is none or not user.check_pwd_hash(password):

return jsonify(errno=ret.dataerr, errmsg='帳號密碼不匹配')

# 儲存登入狀態

session['name'] = user.name

session['mobile'] = user.mobile

session['user_id'] = user.id

# 返回

return jsonify(errno=ret.ok, errmsg='登入成功')

判斷手機號是否存在(是否是註冊使用者)和密碼錯誤是否正確,

# 判斷業務邏輯處理

# 判斷錯誤次數是否超過限制,如果超過限制直接返回

user_ip = request.remote_addr

print(user_ip)

try:

access_nums=redis_store.get("access_nums_%s"%user_ip)

print("access_nums_%s"%user_ip,access_nums)

except exception as e:

logging.error(e)

else:

if access_nums is not none and int(access_nums)>=constants.login_error_max_times:

return jsonify(errno=ret.reqerr, errmsg='錯誤次數太多,請稍後重試')

# 驗證密碼

# if user is none or not user.check_pwd_hash(password):

# return jsonify(errno=ret.dataerr, errmsg='帳號密碼不匹配')

if user is none or not user.check_pwd_hash(password):

try:

redis_store.incr("access_nums_%s" % user_ip)

redis_store.repire("access_nums_%s"%user_ip,constants.login_error_forbid_time)

except exception as e:

logging.error(e)

return jsonify(errno=ret.dataerr, errmsg='帳號密碼不匹配')

# 驗證密碼

# if user is none or not user.check_pwd_hash(password):

# return jsonify(errno=ret.dataerr, errmsg='帳號密碼不匹配')

if user is none or not user.check_pwd_hash(password):

try:

# redis管道

pl = redis_store.pipeline(

) pl.incr(

"access_nums_%s" % user_ip)

pl.repire(

"access_nums_%s"%user_ip,constants.login_error_forbid_time)

pl.execute(

) except exception as e:

logging.error(e)

return jsonify(errno=ret.dataerr, errmsg=

'帳號密碼不匹配'

)

選項

方案請求方法

get請求位址

/sessions

名字體別

是否必須

說明errno

字串是錯誤**

errmsg

字串是錯誤內容

data字典否

{「name": 登入名}

def check_login(

): ""

" 檢查登入狀態

:return: 使用者的資訊或者返回錯誤資訊

""" name = session.get(

'name'

)if name is not none:

return jsonify(errno=ret.ok, errmsg=

'true', data=

) else:

return jsonify(errno=ret.sessionerr, errmsg=

'false'

)

選項

方案請求方法

delete

請求位址

/sessions

字段說明

登出成功

重定向到首頁

def

logout()

:"""退出登入"""

# 清空session

session.clear(

)return jsonify(errno=ret.ok, errmsg=

'ok'

)

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

根據居然老師直播課內容整理 詳見 flask專案1實戰 2.2 flask框架下使用驗證碼 選項方案 請求方法 post 請求位址 users 引數名型別 是否必傳 說明password string是密碼 password2 string 是確認密碼 mobile string 是手機號 sms ...

Flask使用者登入flask login

flask login登入的並保持狀態 注 session 防護 session 資訊一般存放在 cookie 中,但是 cookie 不夠安全,容易被竊取其中 session 資訊,偽造使用者登入系統,幸運的是 flask login 提供了 session 防護機制,提供有 basic 和 st...

Cookie登入專案實戰

對特定物件的追蹤 儲存使用者網頁瀏覽記錄 簡化登入 安全風險 容易洩露使用者資訊 cookie newcookie new cookie string key,object value response.addcookie new cookie cookie cookies request.getc...