登录,注册(flask)
思路
可以把登录注册写到一个视图里边,用一个post方法来实现登录注册
- 接收参数 首先先接收需要用的参数,也就是手机号,密码,验证码等,如果只用手机号登录注册,那就不需要接收密码。
- 校验参数 看看接受的参数是否为空
- 判断验证码是否正确 把接收过来的验证码与redis数据库里的验证码进行比对,如果正确则进行下一步,否则就返回验证码错误
- 判断手机号是否已经注册,如果注册过的话就直接登录,否则就注册 简单来说,就是看看数据库里是否有这个手机号,有的话就登录,没有话就注册,提交到数据库
- 手机号已经注册过,那就判断用户输入的密码是否正确,正确则登录成功,并返回token,否则就是返回登录失败
代码的实现
注册的模型类
class User(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True, comment="用户ID")
phone = db.Column(db.String(11),comment="电话号码")
username = db.Column(db.String(32),default="",comment="用户名")
password = db.Column(db.String(16),default="",comment="密码")
注册蓝图
新建一个文件写入蓝图
from flask import Blueprint
user_bp = Blueprint("work_bp",__name__,url_prefix="/work")
在create_app下注册
from flask import Flask
from views.user import work_bp
from models.model import db
from flask_cors import CORS
def create_app(config):
flask_app = Flask(__name__)
flask_app.config.from_object(config)
db.init_app(flask_app)
cors = CORS(flask_app)
flask_app.register_blueprint(work_bp)
return flask_app
注册路由
from flask import Blueprint
from flask_restful import Api,Resource
user_bp = Blueprint("work_bp",__name__,url_prefix="/work")
api = Api(work_bp)
class UserView(Resource):
def post(self):
pass
api.add_resource(UserView,"/user")
写视图
class UserView(Resource):
def get(self):
user_info = User.query.all()
user_list = []
for i in user_info:
u = {
"username": i.username,
"img": i.img
}
user_list.append(u)
return jsonify({
"code": 200,
"msg": "获取成功",
"data":user_list
})
def post(self):
req = reqparse.RequestParser()
req.add_argument("phone",required=True)
req.add_argument("password")
req.add_argument("code")
args = req.parse_args()
s = SmsTool()
key = "sms_%s"%args["phone"]
code_byte = s.rds.get(key)
if not code_byte:
return jsonify({
"code": 400,
"msg": "验证码过期"
})
if args["code"] != code_byte.decode():
return jsonify({
"code": 400,
"msg": "验证码错误"
})
user_info = User.query.filter(User.phone == args["phone"]).first()
if not user_info:
u1 = User(phone=args["phone"],password=args["password"])
db.session.add(u1)
db.session.commit()
return jsonify({
"code": 200,
"msg": "注册成功"
})
user_info = User.query.filter(User.phone == args["phone"]).first()
if user_info:
if user_info.password != args["password"]:
return jsonify({
"code": 200,
"msg": "密码错误"
})
token = JwtTool().create({
"uid": user_info.id,
"username": user_info.username
})
return jsonify({
"code": 200,
"msg": "登录成功",
"token": token
})