@krinart

Коды ошибок в django.forms?

При ошибках валидации django.forms возвращают текстовые сообщения с описанием ошибки. Для построения REST API это не очень удобно, так как требуется возвращать ещё и код ошибки. Приходится хранить словарь вот такого вида:



message_codes = {<br>
    'password': {<br>
        'default': errors.InvalidPassword,<br>
        'This field is required': errors.PasswordMissing,<br>
    },<br>
    'newPassword': {<br>
        'default': errors.InvalidPassword,<br>
        'This field is required': errors.PasswordMissing,<br>
    },<br>
}<br>




Может кто-нибудь знает, сталкивался, как можно это улучшить, возможно даже сторонними средствами? Наткнулся на вот такую штуку pypi.python.org/pypi/validate, но пока ещё не успел глубоко копнуть.
  • Вопрос задан
  • 3946 просмотров
Пригласить эксперта
Ответы на вопрос 3
barker
@barker
Ну, тут больше пожалуй и правда никак, т.к. из clean приходят только экзепшены с текстом, и собираются они внутри тоже с текстом в словарь по именам полей. Эта штука по ссылке, как я понял, делает то же самое (сопоставляет). В своих clean (формы, полей итд) так-то можно возвращать и с кодом и как угодно, просто не очень понятно на каком уровне у вас REST API. Если выше форм, то никак не сделаете, т.к. собирается внутри форм всё равно в словарь. Если ниже, ну так тут либо свои валидации, либо + в дополнение перекрывать стандартные.
Ответ написан
Комментировать
@realduke
Вообще обычно стараются выделить логику обработки данных в отдельные модули. А для построения REST API используют специальные инструменты наподобии tastypieapi.org или django-rest-framework.org.

Вам же нужно обрабатывать GET, PUT, UPDATE, DELETE и т.д. Как вы это делаете при помощи форм?
Ответ написан
@realduke
И еще не совсем понятно: если у вас REST API, то зачем вам обрабатывать ошибки форм, а если вы просто хотите использовать AJAX и сериализованные в JSON ошибки форм, то чем текстовые сообщения не устраивают?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы