В этой части учебника мы разберём как происходит в Django работа с формами, думаю многим будет очень интересно и самое главное полезно.
Django работа с формами:
Перед тем как вы вести форму, нужно её создать, для этого сначала создайте файл «forms.py», в ней и будет вся настройка формы, вот что мы в ней пишем:
1 2 3 4 5 | from django import forms class PostForm(forms.Form): title = forms.CharField() text = forms.TextField() |
Как видите в целом тут всё похоже на создание модели, если вы не знаете как её создавать, то почитайте статью по ссылке. Единственное отличие что мы импортируем не компонент для создания модели, а компонент для создания формы, и наследую от него класс который будет отвечать на форму от компонента forms.Form.
Но такой принцип создания формы больше подойдёт если вам нужна форма для чего-то, что не имеет свою модель, если же вы пишите форму например для создания поста, как в нашем случае, то тогда лучше напишите что то типа этого:
1 2 3 4 5 6 7 8 9 | from django import forms from .models import Post class PostForm(forms.ModelForm): class Meta: model = Post fields = ["title", "text"] |
Тут мы также импортируем компонент для создание формы, но дополнительно ещё импортируем нашу модель для поста, и наследуем класс формы не от forms.Form, а от forms.ModelForm, таким образом обозначая что для создания формы мы будем использовать модель.
Но внутри класса PostForm, мы ещё создаём класс Meta, внутри него у нас два свойства, model, которому присваиваем модель Post, и fields, это список свойств модели для которых нам нужны поля в форме, на этом тут в целом всё.
Теперь переходим в наше представления, или в файл «views.py», вот что мы там пишем для того, чтобы получить форму:
1 2 3 4 5 6 7 8 9 | from django.shortcuts import render from .forms import PostForm def create_post_page(request): form = PostForm() context = { 'form': form } return render(request, "pages/create_post.html", context) |
Здесь мы уже берём компонент для рендера страницы (Об этом поговорим в следующей части учебника), и форму для создания поста, после чего создаём представление для страницы и берём форму, кладём её в контекст.
Примечание:
Контекст должен в себе хранить переменные для рендера в шаблоне.
Теперь переходи к шаблонам, в нашем случае шаблону «create_post.html»:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Django Forms</title> </head> <body> <form method="POST"> {% csrf_token %} {{ form }} <input type="submit" value="Send" > </form> </body> </html> |
Первое что вы тут замечаете, так это то, что перед объявлением form, мы объявлением csrf_token, это выводит невидимое поле с токенам, он нужен для подтверждения формы, чтобы злоумышленник не мог отправлять данные минуя форму.
Ну и потом выводим форму, и теперь можем в ней писать всё что мы захотим. Также добавляем кнопку input для отправки формы.
Последние что осталось рассмотреть, как принимать POST запросы, для этого удушим наше преставление create_post_page, которое было выше. Вот как мы дополним его:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | from django.shortcuts import render from .forms import PostForm def create_post_page(request): if request.method == "POST": post = PostForm(request.POST) if post.is_valid(): post.save() form = PostForm() context = { 'form': form } return render(request, "pages/create_post.html", context) |
Во-первых мы добавили проверку, типа запроса, если POST, то создаём объект post, дольше проверяем на валидность, или правильно ли пользователь ввёл свои данные, если всё хорошо, то сохраняем новый элемент в базу данных.
Вывод:
В этой части вы узнали основное что вам нужно знать про работу с формой, думаю вам было интересно и полезно, и теперь вы поняли как происходит в Django работа с формами.