python - 使用 Python Eve 的 SQLAlchemy 版本进行验证
问题描述
我想使用 Eve 框架来创建 REST api 并执行数据验证。但我想使用带有 rdbms 后端的 Eve 的 SQLAlchemy 版本。Eve-SQLAlchemy 文档没有说明如何执行此操作。
例如,我将有一个名为的 db 表People
:
# sql_schema.py
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import column_property, relationship
Base = declarative_base()
class People(Base):
__tablename__ = 'people'
id = Column(Integer, primary_key=True, autoincrement=True)
firstname = Column(String(80))
lastname = Column(String(120))
fullname = column_property(firstname + " " + lastname)
后来我告诉 Eve 我的数据库定义:
from eve_sqlalchemy.config import DomainConfig, ResourceConfig
from sql_schema import People
# The default schema is generated using DomainConfig:
DOMAIN = DomainConfig({
'people': ResourceConfig(People)
}).render()
# now I can stuff in my validations, a bit klunkily
DOMAIN['people']['schema']['firstname'].update({'allowed': ['Pete']})
以上有效!如果我尝试People
使用“Pete”以外的名字进行存储,则会收到验证错误。但是在这样的模式定义之后进行验证有点笨拙。例如,Eve 从People
表定义中选取最大长度 80 的约束。如果firstname
允许的约束也可以在那里指定,那就太好了。是否有推荐的方法,它是否完全支持或可能在未来的版本中中断。
解决方案
我试图DomainConfig
在文档中澄清和 Eve 设置之间的关系:https://eve-sqlalchemy.readthedocs.io/en/latest/tutorial.html#eve-settings:
您可以使用
DomainConfig
and来执行此操作,这将为您提供从 SQLAlchemy 模型派生ResourceConfig
的默认模式(字典)。DOMAIN
这是一个起点,可以让您免于冗余配置,但如果您需要,自定义此字典并没有错!
# examples/simple/settings.py
# ...
# Even adding custom validations just for the REST-layer is possible:
DOMAIN['invoices']['schema']['number'].update({
'min': 10000
})
也就是说,如果您实际上在 SQLAlchemy 模型中指定了一个约束,该约束没有自动转换为 Eve 模式定义中的正确验证规则,请打开一个问题!
推荐阅读
- c# - 如何对列表进行排序
通过对象中的属性,根据属性的逗号分隔字符串 - powershell - 外壳 | 有没有办法过滤掉数组中小于 6 个月大的项目?
- angular - 如何将开源 Angular 组件的本地克隆版本包含到 Angular 项目中?
- html - HTML 和 CSS 表格/网格设计
- html - 如何在 CSS 蒙版内有阴影?
- javascript - 将 TensorFlowJS MobileNet + KNN 保存到 TFLite
- flutter - Flutter:如何为两个小部件设置一个水龙头处理程序?
- xml - 如何使用 XMLStarlet / Xpath 选择里面的文本但排除一些内在
- java - 字符串开头的Java不可见空格
- ruby-on-rails - 如何在Ruby中迭代没有已知深度的深层嵌套哈希