使用SQLAlchemy版本的Python Eve进行验证

时间:2019-03-10 05:58:56

标签: python validation sqlalchemy eve

我想使用Eve框架来创建REST api和执行数据验证。但是我想将Eve的SQLAlchemy版本与rdbms后端一起使用。 Eve-SQLAlchemy文档没有说明如何执行此操作。

例如,我将有一个名为width的数据库表:

height

后来我告诉夏娃我的数据库定义:

People

以上有效!如果我尝试使用“ Pete”以外的名字存储# 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']}) 表定义中选取了最大长度80约束。如果也可以在此处指定People允许的约束,那就太好了。是否有推荐的方法,它是否完全受支持或可能会在将来的版本中破坏?

1 个答案:

答案 0 :(得分:1)

我试图阐明https://eve-sqlalchemy.readthedocs.io/en/latest/tutorial.html#eve-settings文档中DomainConfig和Eve设置之间的关系:

  

您可以使用DomainConfigResourceConfig来做到,   会为您提供一个默认模式(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架构定义中的适当验证规则,请提出一个问题!