使用PythonEve的SQLAlchemy版本进行验证

使用PythonEve的SQLAlchemy版本进行验证,python,validation,sqlalchemy,eve,Python,Validation,Sqlalchemy,Eve,我想使用Eve框架来创建RESTAPI和执行数据验证。但是我想使用带有rdbms后端的SQLAlchemy版本的Eve。Eve SQLAlchemy文档没有说明如何做到这一点 例如,我将有一个名为People的db表: # sql_schema.py from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import column_property, relationship Base = dec

我想使用Eve框架来创建RESTAPI和执行数据验证。但是我想使用带有rdbms后端的SQLAlchemy版本的Eve。Eve SQLAlchemy文档没有说明如何做到这一点

例如,我将有一个名为
People
的db表:

# 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']})

以上工作!如果我尝试使用除“Pete”以外的名字存储
人员
,则会出现验证错误。但是像这样在模式定义之后附加验证是有点笨拙的。例如,Eve从
People
表定义中获取最大长度80约束。如果也可以在那里指定
firstname
允许的约束,那就太好了。是否有一种推荐的方法,它是否完全受支持或可能在将来的版本中被破坏。

我试图澄清文档中的
DomainConfig
和Eve设置之间的关系:

您可以使用
DomainConfig
ResourceConfig
执行此操作,这 将为您提供从您的 SQLAlchemy模型。这是一个起点,旨在拯救您 从冗余配置,但定制这并没有错 字典,如果你需要的话

也就是说,如果您在SQLAlchemy模型中实际指定了一个约束,而该约束没有在Eve的模式定义中自动转换为正确的验证规则,请打开一个问题

# examples/simple/settings.py

# ...

# Even adding custom validations just for the REST-layer is possible:
DOMAIN['invoices']['schema']['number'].update({
    'min': 10000
})