1.登录:使用手机号验证码登录
@api.route('/register',methods=['post'])
def register():
# 注意瓜子二手车是登录注册一体的
#todo 获取参数
# phone = request.form.get('phone')
# input_msgcode = request.form.get('msgcode')
data=request.json
phone = data['phone']
input_msgcode = data['msgcode']
print(phone,input_msgcode)
# todo 校验是否为空
if not all([phone,input_msgcode]):
return jsonify(errmsg='参数不完整')
# todo 校验参数是否合法
#todo 从redis取出正确的验证码
try:
local_msgcode = redis_store.get('msg_%s'%phone).decode()
except Exception as e:
return jsonify(errmsg='redis不存在这个数据')
print('本地存储的msgcode:',local_msgcode)
#todo 校验是否验证码是否正确
if input_msgcode!=local_msgcode:
return jsonify(errmsg='验证码错误!')
#todo 判断数据库中是否存在该手机号
user_obj=User.query.filter_by(phone=phone).first()
#todo 不存在就添加到数据库
if not user_obj:
user=User(phone=phone)
try:
db.session.add(user)
db.session.commit()
user_obj=user
except:
db.session.rollback()
return jsonify(errmsg='数据保存失败')
#todo 将用户数据添加到session
session['user_id']=user_obj.id
session['user_phone']=user_obj.phone
return jsonify(msg='登录成功')
2.创建装饰器
def login_required(func):
@functools.wraps(func)#修饰内层函数,防止当前装饰器去修改被装饰函数__name__的属性
def inner(*args,**kwargs):
userid = session.get('user_id')
print('获取session userid',userid)
if not userid:
return jsonify(errmsg='用户未登录',errcode=constant.RET_LOGIN)
else:
g.userid=userid
return func(*args,**kwargs)
return inner
3.使用
@api.route('index')
@login_required
def index1():
return '首页'
效果:
登录是的效果:
未登录的效果: