Перенаправление страницы после проверки формы
Пытаюсь сделать панель регистрации в django. Не понимаю как сделать перенаправление страницы после проверки формы. Перенаправляет сразу же в /home/ без нее. forms.py:
from django import forms
class Gen_info_form(forms.Form):
email = forms.EmailField()
password = forms.CharField(max_length=20)
name = forms.CharField(max_length=100)
html:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Bot</title>
<style>
.field{font-weight:bold;}
.error{color:red;}
</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
</head>
<body class="container">
<form method="POST" id="form">
{% csrf_token %}
<table>
{{ form }}
</table>
<input type="submit" value="Регистрация" id="reg" >
</form>
<script>
$("#reg").click(function pageRedirect() {
window.location.href = "/home/";
});
</script>
</html>
- Как сделать чтобы перенаправляло после валидации?
- В чем разница использования между формами django и прописанными формами в html?
Ответы (1 шт):
в чем разница между формами прописанными в html и django формами
в django формы используются для того, что бы описать все поля(название, типы значений, виджеты), которые нужны для ввода. Соответственно на основе этих данных в дальнейшем формируется html
Дальше после ввода пользователя, джанго использует формы для проверки введенных значений. Т.е. в форме прописываются правила, которые определяют верны ли значения введенные пользователем, или нет. Если данные не верны, то форма формирует соответствующее сообщение об ошибках.
Следующим этапом развития формы в джанго является форма модели
ModelForm, которая автоматически формирует (1) пункт из описанного выше на основании описания Вашей модели, + так же частично(а в некоторых случаях полностью) реализует (2) пункт
Зачем использоваться формами джанго, если можно просто в html прописать все, что требуется?
- Добавляя какое-то значение в html мы часто должны будем править
.pyкод для проверки введенных значений - Формы джанго можно использовать много раз на разных страницах
- От Форм джанго как и от любого объекта можно наследоваться и добавлять какие-то дополнительные правила необходимые в том или ином случае
обычно твоя работа с формами будет выглядеть таким образом:
у тебя есть View в джанго, который отображает текущую страницу с формой. (Данный пример для использования function based view)
from django.http import HttpResponseRedirect
from django.urls import reverse
from django.shortcuts import render
...
def my_form_view(request):
if request.POST:
my_form = MyForm(request.POST)
if my_form.is_valid(): # Проверяем данные формы на корректность введенных значений
#делаем требуемые операции, дальше перенаправляем пользователя на нужную страницу
return HttpResponseRedirect("СТРАНИЦА_НА_КОТОРУЮ_НУЖНО_ПЕРЕНАПРАВИТЬ")
# так же обычно СТРАНИЦА_НА_КОТОРУЮ_НУЖНО_ПЕРЕНАПРАВИТЬ не прописывается жестко, а используется reverse("name"), где name название страница из файла `urls.py` подробней можно прочитать на странице документации https://docs.djangoproject.com/en/3.1/ref/urls/#module-django.urls.conf
else:
my_form = MyForm()
return render(request, "требуемый_шаблон.html", {
"form": my_form
})
)
как ты видишь в данном коде не важно какие именно правила для формы мы прописываем, логика работы не меняется. И все изменения по форме которые нам придется вносить будут располагаться в одном месте в форме джанго в классе MyForm()