我想做的只是使用 Pyramid、SQLAlchemy 的简单博客网站。我选择的表单模块是使用 Coland 的 Deform。所以现在我的表单中有两个字段:name和url。Url 通过音译创建名称字段,但没关系。所以我不想有两篇具有相同网址的文章。我认为我需要以某种方式使用 Colland 制作验证器。但问题是验证器按字段执行,而不是按模型记录执行。我的意思是,如果我要为url字段制作验证器,我的方法中没有关于其他字段的信息,例如id或name,所以我无法执行验证。
现在我有几个我创建了两个小时的字符串=)
from slugify import slugify
def convertUrl(val):
return slugify(val) if val else val
class ArticleForm(colander.MappingSchema):
name = colander.SchemaNode(colander.String())
url = colander.SchemaNode(colander.String(),
preparer=convertUrl)
实际上,我认为我应该在模型级别执行此类验证,即在 SQLAlchemy 模型中,但当然其他规则不起作用,因为此类规则主要用于制作 SQL 脚本(CREATE TABLE):
class Article(TBase, Base):
""" The SQLAlchemy declarative model class for a Article object. """
__tablename__ = 'article'
id = Column(Integer, primary_key=True)
name = Column(Text, unique=True)
url = Column(Text, unique=True)