名為passport.py
依舊存在:密碼為加密以及建立使用者時沒有傳入密碼的問題。
from . import api
from ihome.utils.response_code import ret
from ihome import redis_store, db
from ihome.models import user
from sqlalchemy.exc import integrityerror
import re
@api.route("users", methods=["post"])
def register():
"""註冊 :param : 手機號,簡訊驗證碼,密碼
引數格式:json
"""# 1.接收引數
req_dict = request.get_json()
mobile = req_dict.get("mobile", "")
sms_code = req_dict.get("sms_code", "")
password = req_dict.get("password", "")
password2 = req_dict.get("password2", "")
# 校驗引數
if not all([mobile, sms_code, password]):
return jsonify(reeno=ret.paramerr, errmsg="引數不完整")
# 判斷手機號格式
if not re.match(r"1[34578]\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:
return jsonify(errno=ret.dberr, errmsg="讀取真實簡訊驗證碼異常")
# 判斷簡訊驗證碼的是否過期
if real_sms_code is none:
return jsonify(errno=ret.paramerr, errmsg="簡訊驗證碼過期")
# 刪除redis中的簡訊驗證碼,防止重複使用校驗
try:
redis_store.delete("sms_code_%s" % mobile)
except exception as e:
# 對比判斷使用者填寫的簡訊驗證碼的正確性
if sms_code != real_sms_code:
return jsonify(errno=ret.dataerr, errmsg="簡訊驗證碼錯誤")
# 判斷使用者的手機號是否註冊過
# try:
# user = user.query.filter_by(mobile=mobile).first()
# except exception as e:
# return jsonify(errno=ret.dberr, errmsg="資料庫異常")
# else:
# if user is not none:
# return jsonify(errno=ret.dataexist, errmsg="手機號已存在")
# 儲存使用者的註冊資料到資料庫中
user = user(name=mobile, mobile=mobile)
try:
db.session.add(user)
db.session.commit()
except integrityerror as e:
# 資料庫操作錯誤後的回滾
db.session.rollback()
# 表示手機號出現了重複值,即手機號已註冊過
return jsonify(errno=ret.dataerr, errmsg="手機號已存在")
except exception as e:
# 儲存登入狀態到session中
session['name'] = mobile
session["mobile"] = mobile
session["user_id"] = user.id
# 返回結果
return jsonify(errno=ret.ok, errmsg="註冊成功")
密碼加密**
要給密碼加鹽值
鹽值:生成乙個小的隨機字串
做法:將鹽值salt和加密後的密碼password都儲存下來,
abc$sdsdsdshkjh
abc是鹽值
sdsdsdjijhjjh是加密後的密碼
我們使用flask自帶的加密和校驗的這兩個函式
from werkzeug.security import generate_password_hash
from werkzeug.security import check_password_hash
將密碼加密放到類中進行函式封裝
在models。user類中,我們進行函式封裝
def generate_password_hash(self, origin_password):
"""對密碼進行加密"""
self.pasword_hash = generate_password_hash(origin_password)
我們使用@propoty 將函式的呼叫轉換為屬性的設定
# 加上property裝飾器後,會把函式變為屬性,屬性名即為函式名
@property
def password(self):
"""讀取屬性的函式行為"""
# 函式的返回值會作為屬性值
return "***"
# 將函式變為了設定方法
@password.setter
def password(self, value):
pass
在實際應用中,我們只需要使用
user.password = password
由於密碼一般為加密字元且不能進行讀取操作,所以我們將密碼作為只允許設定的邏輯編寫 php實現使用者註冊密碼的crypt加密
一 1 conn.php mysql select db db database21 conn 選擇資料庫db database21 mysql query set names utf8 設定資料庫編碼格式utf8 2 index.php 使用者註冊 3 index ok.php include c...
flask進行使用者註冊介面處理
1 獲取到使用者寫入的username和password引數 2 將引數傳給業務函式 3 獲取到業務函式的return註冊結果 4 返還給使用者 from flask import flask 引入獲取呼叫介面傳遞的引數 from flask import request 後台處理瀏覽器跨域的包 f...
使用者密碼加密簡介
大多數開發人員使用資料庫儲存密碼,如果密碼直接以明文的形式存放在資料庫中,則系統很不安全。使用雜湊演算法可以解決這一問題。雜湊是一種單向演算法,一旦資料被抓換,將無法再獲得其原始值,可以使用雜湊演算法對密碼進行加密,然後將其儲存在資料庫中。使用者輸入密碼後,可以再次使用雜湊演算法對其進行轉換,然後將...