zoukankan      html  css  js  c++  java
  • 学习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
  • 相关阅读:
    动态内存
    数组
    localstorage基础
    xampp 虚拟机配置
    浏览器兼容性问题积累
    做动画的一大接口 requestAnimationFrame
    canvas 基础
    svn--confilct了怎么办?
    【javascript设计模式】构造器模式、模块模式、单例模式
    关于优雅降级和渐进增强
  • 原文地址:https://www.cnblogs.com/hzjdpawn/p/11820716.html
Copyright © 2011-2022 走看看