
'''
1. 加密的数据 uid
2. 算法 python模块
3. 秘钥 flask_app SECRET_KEY
'''
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer
from flask import current_app,request
from shop_flask.models import User
from shop_flask.utils.message import to_dict_msg
import functools
def generate_auth_token(uid,expiration):
# 创建加密对象
s = Serializer(current_app.config['SECRET_KEY'],expires_in = expiration)
# 生成token
return s.dumps({'id':uid}).decode()
def verify_auth_token(token_str):
# 创建解密对象
s = Serializer(current_app.config['SECRET_KEY'])
try:
data = s.loads(token_str)
except Exception:
return None
usr = User.query.filter_by(id = data['id']).first()
return usr
from shop_flask.user import user
from shop_flask import models, db
from flask import request
from shop_flask.user import user_api
from flask_restful import Resource
import re
from shop_flask.utils.message import to_dict_msg
from shop_flask.utils.token import generate_auth_token,login_required
# 蓝图创建路由
@user.route("/")
def index():
return "User Hello!!!"
class User(Resource):
def get(self):
pass
def post(self):
name = request.form.get("name")
pwd = request.form.get("pwd")
real_pwd = request.form.get("real_pwd")
nick_name = request.form.get("nick_name")
phone = request.form.get("phone")
email = request.form.get("email")
if not all([name, pwd, real_pwd]):
return to_dict_msg(1000)
if len(name) < 2:
return to_dict_msg(1002)
if len(pwd) < 2:
return to_dict_msg(1003)
if pwd != real_pwd:
return to_dict_msg(1004)
if len(nick_name) < 1:
return to_dict_msg(1005)
if not re.match(r"^1[3456789]\d{9}$", phone):
return to_dict_msg(1006)
if not re.match(r"^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,})$", email):
return to_dict_msg(1007)
try:
usrr = models.User(name=name, password=pwd, nick_name=nick_name, phone=phone, email=email)
db.session.add(usrr)
db.session.commit()
return to_dict_msg(200)
except Exception:
return to_dict_msg(2000)
user_api.add_resource(User, "/user")
# 用户登录操作
@user.route("/login", methods=["POST"])
def login():
name = request.form.get("name")
pwd = request.form.get("pwd")
# 验证用户名或密码是否为空
if not all([name, pwd]):
return {"status": 1000, "msg": "数据不完整"}
# 判断用户名是否大于1个字符,
if len(name) > 1:
# 获取用户名
usr = models.User.query.filter_by(name=name).first()
# 判断用户名是否为空
if usr:
# 判断密码是否为空
if usr.check_password(pwd):
token = generate_auth_token(usr.id,1000)
return to_dict_msg(200,data={"token":token})
return {"status": 1001, "msg": "用户名或密码错误"}
老师这里按照视频中写的,报错了,但是根据提示报错信息的地方,查看的跟视频里面没有出入啊,