首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >deform File Upload用无效的pstruct覆盖了我的错误消息:不是FieldStorage实例

deform File Upload用无效的pstruct覆盖了我的错误消息:不是FieldStorage实例
EN

Stack Overflow用户
提问于 2017-03-13 17:11:38
回答 1查看 280关注 0票数 6

如果我没有选择一个文件,只是点击了‘提交’,我得到了以下错误:-

代码语言:javascript
复制
Invalid pstruct: {'upload': "b'' is not a FieldStorage instance"}

这不是我在deform demo site上得到的行为,将其保留为空会导致更合理的“必需”错误消息。

使用我自己的验证器并不能解决这个问题:

代码语言:javascript
复制
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)

我可以看到出现了错误,但是e.render()的输出(其中e是来自form.validateValidationFailure )与错误本身不匹配。相关的deform源代码在'widget.py‘中,_FieldStorage类检查cstruct是否具有file属性,并引发自己的Invalid异常。

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

代码语言:javascript
复制
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 = e.render()
        else:  # Successfully validated, now do operation
            upload_form_operation(request, value_dict)
    if isinstance(form, deform.Form):
        form = form.render()
    return form

如何在不修补deform代码库的情况下显示自己的错误消息?

EN

回答 1

Stack Overflow用户

发布于 2017-03-22 02:43:29

您确定您提交的表单数据确实正确吗?此错误通常发生在deform尝试通过duck类型反序列化提交的值时。

get忽略的一个特别事项是确保您的HTML表单具有额外的enctype定义,例如

代码语言:javascript
复制
 enctype="multipart/form-data"

否则,表单将以字符串的形式提交文件名,然后将失败

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42759940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档