标签: deform

如何使文件上传与Deform和Colander兼容?

我想渲染一个包含一系列文件的表单,代表产品的不同图像.提供文件应该是兼容性的,因此即使没有文件,表单也应该验证.我怎样才能做到这一点 ?

这是我使用的漏勺模式:

    import colander
    import deform
    from deform import Form
    from deform import ValidationFailure
    from deform.interfaces import FileUploadTempStore 


    tmpstore = FileUploadTempStore()

    class Image(colander.Schema):
        image = colander.SchemaNode(
            deform.FileData(),
            widget=deform.widget.FileUploadWidget(tmpstore)
            ) 

    class Images(colander.SequenceSchema):
        images = Image()

    class ProductSchema(colander.Schema):
        completename = colander.SchemaNode(colander.String(), title="Complete Name")

        description = colander.SchemaNode(colander.String(), 
                                 widget = deform.widget.TextAreaWidget())

        images = Images()


    schema = ProductSchema()
    form = Form(schema, buttons=("submit", ))
Run Code Online (Sandbox Code Playgroud)

我试图添加一个'缺失'的参数,如:

image = colander.SchemaNode(
        deform.FileData(),
        missing = ???
        widget=deform.widget.FileUploadWidget(tmpstore)
        ) 
Run Code Online (Sandbox Code Playgroud)

我觉得我什么时候有功能

missing={'filename': None, 'uid':None}
Run Code Online (Sandbox Code Playgroud)

但我真的不确定这是正确的做法......

谢谢 !

python pyramid deform colander

9
推荐指数
1
解决办法
1524
查看次数

可以访问所有节点的Deform/Colander验证器?

如何在Deform/Colander中定义可以访问所有节点值的自定义验证器.我需要访问两个字段中的值才能确定某个特定值是否有效?

python pyramid deform colander

8
推荐指数
1
解决办法
2090
查看次数

在Python Pyramid路由配置中使用查询字符串

这是我想要做的非常具体,所以我开始描述它是什么:

我想出了使用Matplotlib等渲染的所有部分,但我是Pyramid和Deform的新手.我还有一个工作视图,从文件中提供图.变形也是一种作品.目前还不清楚如何最好地构建ULR以区分服务,编辑和渲染用例.我猜在Pyramid中这意味着如何配置serve_view和edit_view的路由.

__init__.py:
    config.add_route('serve_route', 
        '/{project_name}/testruns/{testrun_name}/plots/{plot_name}.png')
    config.add_route('edit_route', 
        '/{project_name}/testruns/{testrun_name}/plots/{plot_name}.png')
# can I use query strings like "?action=edit" here to distinguish the difference?


views.py:
@view_config(context=Root, route_name='serve_route')
def plot_view(context, request):
... 
@view_config(context=Root, renderer='bunseki:templates/form.pt', route_name='edit_route')
def edit_view(request):
...
Run Code Online (Sandbox Code Playgroud)

我金字塔手册我找不到参考如何在路线中设置参数.我想指向一些文档或示例的指针就足够了,我可以自己弄清楚细节.谢谢!

python forms routes pyramid deform

6
推荐指数
1
解决办法
2864
查看次数

变形文件上传使用无效的pstruct覆盖我的错误消息:不是FieldStorage实例

如果我没有选择文件而只是点击"提交",我会收到以下错误: -

Invalid pstruct: {'upload': "b'' is not a FieldStorage instance"}
Run Code Online (Sandbox Code Playgroud)

这不是我在变形演示站点上获得的行为,其中将其留空会导致更合理的"必需"错误消息.

使用我自己的验证器如下所示无法解决问题: -

def validate_file(node, value, **kwargs):
    if not value:
        raise colander.Invalid(node, "Please select a file")

class Schema(colander.MappingSchema):
    excel_file = colander.SchemaNode(deform.FileData(),
            widget=deform.widget.FileUploadWidget(tmpstore),
            validator=validate_file)
Run Code Online (Sandbox Code Playgroud)

我可以看到错误被引发,但是e.render()e是ValidationFailurefrom 的输出form.validate与错误本身不匹配.相关的deform源代码位于"widget.py"中,其中_FieldStorage类检查是否cstruct具有file属性并引发它自己的Invalid异常.

这是执行验证调用的函数(实际上是bog标准的东西),它返回渲染的页面.

def generate_upload_form(request):
    form = deform.Form(upload_schema, buttons=('submit',))
    if getattr(request, 'POST') and 'submit' in request.POST:
        try:
            value_dict = form.validate(request.POST.items())
        except deform.ValidationFailure as e:  # Invalid form
            form …
Run Code Online (Sandbox Code Playgroud)

python pyramid deform

6
推荐指数
1
解决办法
192
查看次数

允许在变形表单描述字段中使用原始 HTML

在渲染时如何阻止 Deform 在字段标题或描述中转义 HTML?我目前最好的解决方案是用我需要的东西搜索/替换返回的呈现的 HTML 字符串。

默认情况下,变形会将所有 HTML 字符转义为 HTML 实体,我想在其中一个字段描述中添加一个标签。

python pyramid chameleon deform colander

5
推荐指数
1
解决办法
305
查看次数

变形/漏勺HTML中的多对多关系选择字段

我正在使用Pyramid框架并使用Deform包来呈现HTML表单,并给出了漏勺方案.我正在努力解决如何处理具有多对多关系的模式的问题.例如,我的s​​qlalchemy模型如下所示:

class Product(Base):
    """ The SQLAlchemy declarative model class for a Product object. """
    __tablename__ = 'products'

    id = Column(Integer, primary_key=True)
    name = Column(String(80), nullable=False)
    description = Column(String(2000), nullable=False)
    categories = relationship('Category', secondary=product_categories,
                               backref=backref('categories', lazy='dynamic'))


class Category(Base):                                                                                
    """ The SQLAlchemy declarative model class for a Category object. """                            
    __tablename__ = 'categories'

    id = Column(Integer, primary_key=True)                                                                                            
    name = Column(String(80), nullable=False)                                                                                                                                 
    products = relationship('Product', secondary=product_categories,                                 
                               backref=backref('products', lazy='dynamic'))


product_categories = Table('product_categories', Base.metadata,
    Column('products_id', Integer, ForeignKey('products.id')),
    Column('categories_id', Integer, ForeignKey('categories.id'))
)
Run Code Online (Sandbox Code Playgroud)

如您所见,这是一个非常简单的模型,代表一个在线商店,其中一个产品可以属于一个或多个类别.在我的渲染形式中,我想有一个选择多个字段,我可以在其中选择几个不同的类别来放置产品.这是一个简单的漏勺模式:

def …
Run Code Online (Sandbox Code Playgroud)

python pyramid deform colander

4
推荐指数
1
解决办法
735
查看次数

如何在Deform/Colander中使用错误消息进行简单的值检查

我正在Deform/Colander中实现一个简单的'tick to agree条款和条件框'.

因此,我只想检查该复选框是否有错误信息"你必须同意T&C".

我明白我可以用:

colander.OneOf([True]) 
Run Code Online (Sandbox Code Playgroud)

确保勾选方框.但是,OneOf不允许自定义错误消息.这样做的正确方法是什么?

python pyramid deform colander

2
推荐指数
1
解决办法
1169
查看次数

哪一个是表单验证的正确方法?Colander的Schema验证或Deform的表单验证?

我刚刚开始在我的一个项目中使用Pyramid,我有一个案例,我需要验证表单字段输入,通过获取表单字段值并进行Web服务调用来断言值的正确性.例如,有一个名为银行CUSTOMER-ID的字段.我需要将(单独)作为输入并通过进行Web服务调用(如http://someotherdomain/validate_customer_id/?customer_id=<input_value>)来在服务器级别进行验证.

我正在使用Colander进行表单模式管理,并使用Deform进行所有表单验证逻辑.我很困惑我需要在CUSTOMER-ID案例中放置验证逻辑.它是MySchema().bind(customer_id=<input_value>)(它有一个查询web服务的延迟验证器)或form.validate(request.POST.items())?如果我采用延迟验证器的路径,则会因错误的CUSTOMER-ID MySchema().bind而引发colander.Invalid错误.没关系.但是,该错误不是在表单级别,而是在模式级别.那么我该如何以理智的方式告诉用户这个呢?

我对Django表单有很好的经验,所以我期待像clean方法一样.像form ['customer_id']这样的表单错误.错误是我在模板级别所期望的.Pyramid的Deform还是Colander有可能吗?

forms validation pyramid deform colander

2
推荐指数
1
解决办法
1984
查看次数

具有变形的动态形式

使用变形制作表单,并希望根据用户的选择更改pageShema类.防爆.如果他从selectwidget中选择选项1,则向他显示一组字段,如果是其他选择的情况 - 另一个.这该怎么做?

python pylons deform colander

1
推荐指数
1
解决办法
300
查看次数

标签 统计

deform ×9

pyramid ×8

python ×8

colander ×7

forms ×2

chameleon ×1

pylons ×1

routes ×1

validation ×1