1. 创建用户模型
(1). apps / models / user_model.py 创建用户model
from apps.models import BaseModel
from exts import db
class User(BaseModel):
__tablename__ = "user"
username = db.Column(db.String(50), nullable=False, unique=True)
password = db.Column(db.String(128))
phone = db.Column(db.String(11), unique=True, nullable=False)
icon = db.Column(db.String(256))
def __str__(self):
return self.username
(2). app.py 引入模型类
from apps.models.user_model import *
(3). 执行指令进项数据库迁移
# python app.py db init # 不需要执行了,只在第一次执行一次即可
python app.py db migrate
python app.py db upgrade
2. 定义API
(1). apps / apis / user_api.py 定义user蓝图
from flask import Blueprint
from flask_restful import Api
user_bp = Blueprint('user', __name__)
api = Api(user_bp)
(2). apps / __init__.py注册蓝图
app.register_blueprint(user_bp)
(3). apps / apis / user_api.py 定义,请求和返回格式
# 输入: 验证前端参数
sms_parser = reqparse.RequestParser()
sms_parser.add_argument('mobile', type=inputs.regex(r'^1[356789]\d{9}$'), help="手机号码格式错误", required=True, location="form")
# 输入
lr_parser = sms_parser.copy() # 浅拷贝:将上面的parser拷贝一份
lr_parser.add_argument("code", type=inputs.regex(r'^\d{4}$'), help="必须输入四位数字验证码", required=True, location="form")
# 输出
user_fields = {
"id": fields.Integer,
"username": fields.String,
}
(4). apps / apis / user_api.py 定义注册登录接口
# 用户注册和登录
class LoginAndRegisterApi(Resource):
def post(self):
args = lr_parser.parse_args()
mobile = args.get("mobile")
code = args.get("code")
# 数据库中查找是否存在此mobile
if code=="1111":
users = User.query.filter(User.phone == mobile).first()
# 判断列表中是否存在用户
if not users:
# 注册处理
users = User()
users.phone = mobile
s = ""
for i in range(13):
ran = random.randint(0, 9)
s += str(ran)
users.username = "用户" + s
db.session.add(users)
db.session.commit()
# 登录处理,进入登录状态,session,cookie,cache(redis)
session["mobile"] = 1
return marshal(users, user_fields) # 输出的内容
else:
return {"errmsg": "验证码错误", "status": 400}
(5). apps / apis / user_api.py 视图函数绑定api
# 登录注册
api.add_resource(LoginAndRegisterApi, "/login")