(根據居然老師直播課內容整理)
選項方案
請求方法
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...