Обработка ошибки формы при загрузке в Appengine Blobstore - PullRequest
2 голосов
/ 11 марта 2011

Я использую @wkornewald's django-nonrel и django-filetransfer в Google App Engine.

Я могу загружать файлы просто отлично, но только тогда, когда вся форма действительна. Если форма не проходит проверку для какого-либо поля, она полностью разрушается, вместо того, чтобы вернуться к пользователю, чтобы исправить изменения.

Сообщение об ошибке:


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 хочет, чтобы вы отправили форму на URL-адрес загрузки BLOB-объектов, и этот URL-адрес не знает, что делать с ошибкой. Должен ли быть промежуточный шаг, который обрабатывает большую часть формы и сообщений в URL для загрузки, если и только если остальные значения действительны?

1 Ответ

2 голосов
/ 13 марта 2011

API-интерфейс blobstore требует представления обработчика загрузки для возврата перенаправления.

, поскольку в журнале ошибок, опубликованном выше, указано:


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

Чтобы обойти это, я изменил методы add_view и change_view в ModelAdmin, чтобы он возвращал перенаправление при ошибке проверки формы, но привязалв строке запроса, чтобы входные значения не были потеряны.

Далее, при инициализации формы по запросу GET, я проверяю «fail_validation» в параметрах запроса, чтобы указать отправку данных формы в формы /Formsets, так что проверка будет запускаться.

Код находится в bitbucket: https://aaronmadison@bitbucket.org/aaronmadison/django-filetransfers.

Теперь вы можете загружать в blobstore и обрабатывать ошибки ... yay.

...