学习python-20191108(2)REST接口相关

一、客户登录验证

在使用接口前,需要对客户进行登录验证

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

 

posted on 2019-11-08 15:46  闪亮的金子  阅读(226)  评论(0)    收藏  举报