我想使用Eve框架来创建REST api和执行数据验证。但是我想将Eve的SQLAlchemy版本与rdbms后端一起使用。 Eve-SQLAlchemy文档没有说明如何执行此操作。
例如,我将有一个名为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)
后来我告诉夏娃我的数据库定义:
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']})
以上作品!如果我尝试使用“ Pete”以外的名字存储
People
,则会收到验证错误。但是,在像这样的模式定义之后进行验证有点笨拙。例如,夏娃从People
表定义中选取了最大长度80约束。如果也可以在其中指定firstname
允许的约束,那就太好了。是否有推荐的方法,它是否完全受支持或可能在将来的版本中破坏? 最佳答案
我试图阐明文档中DomainConfig
和Eve设置之间的关系:https://eve-sqlalchemy.readthedocs.io/en/latest/tutorial.html#eve-settings:
您可以使用DomainConfig
和ResourceConfig
来实现,
会给您一个默认的模式(DOMAIN
词典),该模式是从您的
SQLAlchemy模型。这只是一个起点,可以节省您的时间
从冗余配置中,但是自定义此设置没有错
如果需要的话词典!
# examples/simple/settings.py
# ...
# Even adding custom validations just for the REST-layer is possible:
DOMAIN['invoices']['schema']['number'].update({
'min': 10000
})
也就是说,如果您实际上在SQLAlchemy模型中指定了一个约束,但该约束没有自动转换为Eve架构定义中的适当验证规则,请提出一个问题!
关于python - 使用Python Eve的SQLAlchemy版本进行验证,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55084903/