Как мне разработать приложение Django / Javascript для обеспечения условных ответов Ajax на обычные запросы HTTP?
На сервере у меня есть пользовательский объект Form. Когда браузер размещает данные формы, сервер проверяет представленные данные на соответствие существующим данным и правилам (например, если форма добавляет какую-либо сущность в базу данных, существует ли эта сущность в базе данных?). Если данные проходят, сервер сохраняет, генерирует идентификационный номер и добавляет его к данным формы, а затем передает форму и данные обратно в браузер.
if request.method == 'POST':
formClass = form_code.getCustomForm()
thisForm = formClass(data=request.POST)
if thisForm.isvalid():
saveCheck = thisForm.saveData()
t = loader.get_template("CustomerForm.html")
c = Context({ 'expectedFormObj': thisForm })
(Обратите внимание, что моя пользовательская логическая проверка выполняется в saveData () и отделена от проверки html, выполняемой isvalid ().)
Пока что стандартный Джанго (надеюсь). Но если данные не проходят, я хочу отправить сообщение в браузер. Я полагаю, что saveData () может поместить сообщение в атрибут формы, и шаблон может проверить этот атрибут, встроить свои данные в переменную javascript и включить функцию javascript для отображения сообщения. Но передача всей этой формы html назад, просто для добавления одного сообщения, кажется неэлегичной (как и стандартный процесс отправки формы в Django, но не говоря уже о том, что это). В таком случае я хотел бы просто вернуть сообщение.
Теперь я полагаю, что мог бы связать функцию Javascript с событием onsubmit формы html, и это вызвало бы выдачу XMLHttpRequest, и заставить сервер отвечать на это на основе вывода вызова saveData (). Но тогда браузер имеет два запроса к серверу в ожидании (POST и XHR). Возможно, успешный saveData () переписал бы всю страницу и удалил бы любой потенциал для конфликта. Но я также должен заставить сервер упорядочить свой ответ XHR, чтобы следовать ответу на POST, и выяснить, как передать результат saveData в ответ на XHR. Я предполагаю, что это выполнимо, даже без программирования потока, я не знаю, но это кажется грязным.
Я предполагаю, что мог бы использовать javascript, чтобы сделать ответ браузера условным для чего-либо в ответе на запрос POST (либо переписать всю страницу, либо просто отобразить сообщение). Но я подозреваю, что javascript страницы передает контроль над браузером с помощью запроса POST и что любой ответ на POST просто переписывает страницу.
Так можно ли спроектировать процесс для передачи всей формы обратно, только если работает saveData () на стороне сервера, и сообщение, которое отображается без перезаписи всей формы, если saveData () не работает? Если да, то как?