实现登录和注册,sql语句进行登录注册
1.登录注册思路
1.接收参数
2.校验参数
3.校验验证码
4.逻辑,增删改查
5.返回响应
2.强制登录的思路
1.定义函数login(func)和warpper函数
2.定义钩子函数获取g.uid
3.对数据进行返回
1.1代码实现
# 1.创建视图函数
class LoginView(Resource):
def post(self):
# 接收参数
req=reqparse.RequestParser() # 实例化数据
req.add_argument('phone',required=True)
req.add_argument('code',required=True)
# 校验参数
args=req.parse_args()
# 1.校验验证码
red=redis.Redis(host='1270.0.0.1')
red_byte=red.get('sms_%s'%args['phone'])
if not red_bute:
return jsonify({
'code':400,
'msg':'验证码过期'
})
code_str=red_byte.decode()
if code_str!=args['code']:
return jsonofy({
'code':400,
'msg':'验证码已经过期'
})
# 逻辑增删改查
user=User.query.filter(User.phone==args['phone']).first()
if not user:
u=User(
phone=args['phone']
)
db.session.add(u)
db.session.commit()
user=User.query.filter(User.phone==args['phone']).first()
serect_key=current_app.config.get('加密')
token=jwt.encode({
'uid':user.uid,
'phone':user.phone
},serect_key)
return jsonify({
'code':200,
'msg':'登录成功',
'data':{
'token':token
}
})
对接的前端页面
在获取验证码的地方绑定事件进行验证码校验
在获取登录按钮的时候进行的保存token登录
强制登录代码实现
@定义的db.before_request
def gz():
req=reqparse.RequestParser() # 实例化数据
req.add_argiment('token',default='',localhost='HS256')
arsg=req.parse_args()
jwt_token=args['token']
secret_key=current_app.config.get('SECRET_KEY')
try:
payload=jwt.decode(jwt_token,secret_key,algorithms='HS256')
g.uid=payload['uid']
except Exception as e:
print(e)
g.uid=0
def login(func): # 是一个闭包函数
def warpper(*args,**kwargs):
uid=g.uid
if uid==0:
return jsonify({
'code':400,
'msg':'用户未登录'
})
return func(*args,**kwargs)
return warpper
根据强制登录进行的数据获取
class HomeView(Resource):
def get(self):
uid=g.uid
user_info=User.query.filter(user.uid==uid).first()
return jsonify({
'uid':user_info.uid,
'phone':user_info.phone
})
采用sql语句进行登录
导包
from flask_restful import request,reqparse
from flask import Blueprint,jsonify
import redis,json,re
import random
from utils.myjwt import MyJwt
from db import db
具体代码实现
@user_db.route("/login",methods=["POST"])
def login():
if request.method=="POST":
# 获取所有的数据
req = reqparse.RequestParser()
# 从数据库获取字段
req.add_argument('phone')# 获取用户表的密码
req.add_argument('password')# 获取用户表的手机号
req.add_argument('id')# 获取用户表的手机号
# id = int(data['id']) # 获取用户表的ID
args=req.parse_args()
# 判断是否存在用户
if not args['phone']:
return jsonify({
"code":401,
"mag":"手机号不存在"
})
# 查询数据库中是否存在用户
pho="select phone from user where phone='%s'"% args['phone']
res=db.find(pho) # 获取所有用户表中的数据
# 存在则执行登录操作否则进行注册操作
print(222)
if not res:
# 注册操作
# 创建手机号和密码
print(3333)
# sql="insert into user(password,phone) values(%s,%s)"% args['password'],args['phone']
sql = "insert into user(phone,password) values (%s,%s)" %(args['phone'],args['password'])
print(4444)
db.update(sql)# 创建
db.commit()# 提交
return jsonify({
"code":200,
"msg":"注册成功"
})
# 登录操作
else:
# 查询数据库中是否包含数据
pho = "select phone from user where phone='%s'" % args['phone']
res=db.find(pho)
if res:
# 生成token
token=MyJwt().jwt_encode({
'phone': args['phone']
})
return jsonify({
"code":200,
"msg":"登录成功",
"token":token
})