首页 > 其他分享 >Flask 学习-71.Flask-RESTX 枚举类型Enum字段

Flask 学习-71.Flask-RESTX 枚举类型Enum字段

时间:2022-09-22 09:33:57浏览次数:47  
标签:RESTX name Flask Enum db api True teacher size

前言

model 中有枚举类型字段使用示例

模型设计

class Teachers(db.Model):
    __tablename__ = 'teacher'  # 数据库表名
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(50), unique=True, nullable=False)
    size = db.Column(db.Enum("SMALL", "MEDIUM", "LARGE"), default="MEDIUM")
    address = db.Column(db.String(150), nullable=True)

    def save(self):
        """保存数据"""
        db.session.add(self)
        db.session.commit()
        
    def __repr__(self):
        return f"<Teachers(id='{self.id}', name='{self.name}'...)>"

同步到数据库

flask db migrate
flask db upgrade

同步后数据库里面可以看到 size 字段是枚举类型

校验枚举类型

请求入参校验枚举类型, 添加enum 参数

teacher_model = api.model('TeacherModel', {
    'name': fields.String(
        max_length=50, required=True, description='姓名'),
    'size': fields.String(
        enum=["SMALL", "MEDIUM", "LARGE"], required=False, description='型号'),
    'address': fields.String(max_length=150, description='邮箱')
})

视图

@api.route('/teacher')
class TeacherView(Resource):

    @api.doc(description='新增老师')
    @api.marshal_with(teacher_model)
    @api.expect(teacher_model, validate=True)
    def post(self):
        """
            add teacher
        """
        api.logger.info(f"获取请求参数: {api.payload}")
        t = Teachers(
                name=api.payload.get('name'),
                size=api.payload.get('size'),
                address=api.payload.get('address'),
            )
        t.save()  # 保存数据
        return t, HTTPStatus.CREATED

测试接口

POST http://127.0.0.1:5000/api/v1/teacher HTTP/1.1
User-Agent: Fiddler
Host: 127.0.0.1:5000
Content-Length: 33
Content-Type: application/json

{"name": "yoyo", "size": "SMALL"}

HTTP/1.0 201 CREATED
Content-Type: application/json
Content-Length: 65
Server: Werkzeug/2.0.2 Python/3.8.5
Date: Thu, 22 Sep 2022 01:22:52 GMT

{
    "name": "yoyo",
    "size": "SMALL",
    "address": null
}

参数不合法,返回400 BAD REQUEST

标签:RESTX,name,Flask,Enum,db,api,True,teacher,size
From: https://www.cnblogs.com/yoyoketang/p/16718021.html

相关文章

  • flask 博客系统 逻辑关系
    主干部门提交代码评论的逻辑......
  • Flask 学习-70.Flask-RESTX 注册接口实例
    前言注册接口主要是密码需要加密,用到werkzeug.security模块的2个方法generate_password_hash,check_password_hash.数据库操作用到Flask-SQLAlchemy,相关的基础配置就......
  • 在Linux服务器上部署Flask
    要使用Flask,需要对MVC有一定了解构建PythonWeb项目,首先安装Flask:pip3installflask安装完成后,使用flask--version确保安装成功:然后创建Web目录和app目录设为~/demo......
  • flask升序降序,分页,序列化器
    classUserInfoView(Resource):#@marshal_with(field)defget(self):#daming=User('daming',40,None)#xiaoming=User('xiaoming',16,damin......
  • Flask学习笔记(一)-最小实例+路由
    一、Flask说明Flask是一个使用Python编写的轻量级Web应用框架。其WSGI工具箱采用Werkzeug,模板引擎则使用Jinja2。Flask使用BSD授权。Flask也被称为“microfr......
  • C#教程 - 枚举器 & 迭代器(IEnumrator & Iterator)
    更新记录转载请注明出处:https://www.cnblogs.com/cqpanda/p/16691006.html2022年9月19日发布。2022年9月10日从笔记迁移到博客。枚举器(Enumerator)枚举器和可枚举......
  • Flask设置logger日志模板
    logger日志模板"""flask设置logger日志统一目录:Myapp/utils/logger.py"""importloggingfromlogging.handlersimportRotatingFileHandlerclassLogger(object):......
  • JAVA 几种常见的 ENUM
    方法一:常量在JDK1.5之前,我们定义常量都是:publicstaticfianl....。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法publicen......
  • enumerate 的作用是什么?
    enumerate的作用是什么?#答案enumerate的含义是枚举,列举,和iterate\tenerate意思相近'''enumerate函数是将一个可迭代对象中元素,按元素顺序每个增加一个索引值,将其......
  • Flask 学习-55.文件上传功能开发
    前言文件上传的基本原理实际上很简单,基本上是:一个带有enctype=multipart/form-data的标记,标记中含有一个。应用通过request对象的files字典来访问文件。使......