一、客户登录验证
在使用接口前,需要对客户进行登录验证
enums.py文件代码:
#定义枚举,客户端登录的方式有很多种形式:邮箱登录、手机登录、微信小程序登录、微信公众号登录 class ClientTypeEnum(Enum): USER_EMAIL = 100 # 邮箱 USER_MOBILE = 101 # 手机 USER_MINA = 200 # 微信小程序 USER_WX = 201 # 微信公众号
forms.py文件代码:
from wtforms import StringField, IntegerField from wtforms.validators import DataRequired, length, Email, Regexp from wtforms import ValidationError class ClientForm(Form): account = StringField(validators=[DataRequired(message='不允许为空'), length( min=5, max=32 )])#登录账号 账号必须传入 secret = StringField()#登录密码 可以不传密码 type = IntegerField(validators=[DataRequired()])#客户端类型 类型必须传入 #自定义的验证器,验证类型只能为要求的枚举值 def validate_type(self, value): try: client = ClientTypeEnum(value.data) #本行代码实现了数字向枚举的转换 value.data是传入的数字
except ValueError as e: raise e self.type.data = client
客户端提交数据的方式有:表单提交、JSON对象方式提交(移动客户端)
client.py文件代码:
from flask import request, jsonify from app.libs.error_code import ClientTypeError, Success from app.libs.redprint import Redprint from app.models.user import User from app.validators.forms import ClientForm, UserEmailForm from app.libs.enums import ClientTypeEnum from werkzeug.exceptions import HTTPException api = Redprint('client') @api.route('/register', methods=['POST']) def create_client(): #接收参数的方式有两类: # 1、data = request.json 使用flask的request对象 # 2、request.args.to_dict() # 方式一 data = request.json form = ClientForm(data=data) # 方式二 form = ClientForm().validate_for_api() # 用字典的方式,处理客户端不同的登录方式 promise = { ClientTypeEnum.USER_EMAIL: __register_user_by_email, #对应下方函数 邮箱登录 ClientTypeEnum.USER_MINA: __register_user_by_MINA # 微信小程序登录 } promise[form.type.data]() return Success() #邮箱登录的对应函数 def __register_user_by_email(): form = UserEmailForm().validate_for_api() User.register_by_email(form.nickname.data, form.account.data, form.secret.data) #微信小程序登录的对应函数 def __register_user_by_MINA(): pass