上传到Appengine Blobstore时处理表单失败

时间:2011-03-11 12:22:55

标签: python django google-app-engine django-forms django-nonrel

我在Google App Engine上使用@wkornewald的django-nonrel和django-filetransfer。

我能够很好地上传文件,但只有在整个表单有效时才能上传。如果表单未通过任何字段的验证,它将完全爆炸而不是返回给用户来修复更改。

错误信息是:


INFO     2011-03-10 20:27:09,496 dev_appserver.py:535] Internal redirection to /admin/rr/member/add/
INFO     2011-03-10 20:27:09,662 dev_appserver_blobstore.py:328] Upload handler returned 200
ERROR    2011-03-10 20:27:09,662 dev_appserver_blobstore.py:341] Invalid upload handler response. Only 301, 302 and 303 statuses are permitted and it may not have a content body.
INFO     2011-03-10 20:27:09,680 dev_appserver.py:3317] "POST /_ah/upload/ag5kbXJvbGxpbnJlbGljc3IcCxIVX19CbG9iVXBsb2FkU2Vzc2lvbl9fGIkBDA HTTP/1.1" 500 -

我有一个看起来像这样的简单模型:


class Member(PhotoMixin, models.Model):
    name = models.CharField(max_length=50)
    name2 = models.CharField(max_length=50, blank=True)

    member_since = models.DateField(blank=True, null=True)
    full_size_image = models.FileField(verbose_name="Photo", upload_to='members/')
    is_active = models.BooleanField(default=True)

有没有办法可以更优雅地处理这个问题?我觉得这可能是因为django-filetransfers希望你将表单发布到blob上传网址,并且该网址不知道如何处理故障。当且仅当其余部分有效时,是否应该有一个中间步骤处理大部分表单并发布到上传URL?

1 个答案:

答案 0 :(得分:2)

blobstore api需要上传处理程序视图才能返回重定向。

如上面发布的错误日志所述:


Only 301, 302 and 303 statuses are permitted and it may not have a content body.

为了解决这个问题,我修改了ModelAdmin的add_view和change_view方法,以便在表单验证失败时返回重定向,但是在查询字符串上添加了重定向,因此输入值不会丢失。

接下来,在GET请求中初始化表单时,我在查询参数中检查'failed_validation'以指示将表单数据发送到表单/表单集,以便验证将触发。

代码位于bitbucket:https://aaronmadison@bitbucket.org/aaronmadison/django-filetransfers

现在你可以上传到blobstore并处理错误... yay。