首页 > 编程语言 > 详细

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

时间:2019-11-08 15:57:41      阅读:100      评论:0      收藏:0      [点我收藏+]

一、客户登录验证

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

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

 

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

原文:https://www.cnblogs.com/hzjdpawn/p/11820716.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!