-
Нужно реализовать несколько ajax форм, например как на ya.ru форма логина, только с валидацией на клиенте. Подскажите как лучше сделать или может есть готовые решения?
-
Готовых нет, но штука по идее довольно простая. Делаешь вьюху, которая будет собирать POST, валидировать той же формой, что и при нормальном посте, а результат выдавать JSON'ом:
def validate(request): form = SomeForm(request.POST): form.is_valid() from django.utils.simplejson import dumps return HttpResponse(dumps(form.errors), mimetype='application/json')На клиенте проще всего, наверное, взять jQuery Form plugin, который берет нормальную форму, вешается на ее submit и отсылает ее ajax'ом. В ответ вызывает твою функцию, которая обработает пришедший json. Показывать ошибки можно например так:
function show_form_errors(form, error_json) { clear_form_errors(form); for (name in error_json) { var elem = form.find('[@name=' + name + ']'); elem.parent().append($('<em class="errors">' + data[name] + '</em>')); } set_submit_buttons_state(form, false); } function clear_form_errors(form) { form.find("em.errors").remove(); } -
Не, не совсем я то написал. Если использовать ajax, то смысл валидации на клиенте пропадает, можно просто к стандартной вьюхе, обрабатывающей форму, приделать выдачу JSON'а, если
request.is_ajax().
