Flask 学习-71.Flask-RESTX 枚举类型Enum字段
前言
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
标签:
Flask
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2021-09-22 python测试开发django-138.Bootstrap 字体图标(Glyphicons)
2021-09-22 python测试开发django-137.Bootstrap 输入框组件input-group
2021-09-22 python测试开发django-136.Bootstrap 顶部导航navbar
2020-09-22 httprunner学习28-yaml文件 参数化读取 csv 文件字符串转 int
2020-09-22 httprunner学习27-参数关联时在 yaml 文件 int 和 str 数据类型转换
2019-09-22 httprunner学习8-validate校验器
2019-09-22 httprunner学习7-extract提取content返回对象