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

问题描述 投票:2回答:1

我想使用Eve框架来创建REST api并执行数据验证。但我想使用带有rdbms后端的EveAline的SQLAlchemy版本。 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)

后来我告诉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”以外的名字存储People,我会收到验证错误。但是像这样在模式定义之后强调验证是有点笨拙的。例如,Eve从People表定义中获取最大长度为80的约束。如果firstname允许约束也可以在那里指定,那将是很好的。是否有推荐的方法,它是否受到支持或在将来的版本中可能会中断。

python validation sqlalchemy eve
1个回答
1
投票

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

你可以使用DomainConfigResourceConfig这样做,它将为你提供一个从你的SQLAlchemy模型派生的默认模式(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模式定义中的正确验证规则,请打开一个问题!

© www.soinside.com 2019 - 2024. All rights reserved.