Продвинутый Django 5 для продолжающих

Прогресс по курсу:  0/193

4.5 Написание тестов для форм и шаблонов
4 из 6 шагов пройдено
0 из 6 баллов  получено

В Django создать форму программно довольно просто. Это упрощается за счет использования класса ModelForm. Это позволяет Django помочь нам в создании наших форм, используя наши модели с соответствующей проверкой.

Мы экономим время и усилия, поскольку нам не нужно создавать форму с нуля и разрабатывать нашу фундаментальную проверку. Это класс, с которым мы будем работать для нашего приложения электронной библиотеки.

Вот цели этого урока:

  • Создайте новый файл с именем forms.py в папке приложения электронной библиотеки. Здесь мы пишем форму в Django.
  • Используйте ModelForm класс для создания формы из нашей Catalog модели.
  • Используйте BootStrap библиотеку CSS, чтобы добавить стиль к форме.

Создание формы 

Создаем новый файл с именем forms.py в папке elibrary_app и добавляем следующий код:

from django import forms
from .models import Catalog


class AddBookForm(forms.ModelForm):
    class Meta:
        model = Catalog
        fields = "__all__"

        widgets = {
            'title': forms.fields.TextInput(attrs={
                'class': 'form-control'
            }),
            'ISBN': forms.fields.TextInput(attrs={
                'class': 'form-control'
            }),
            'author': forms.fields.TextInput(attrs={
                'class': 'form-control'
            }),
            'price': forms.fields.NumberInput(attrs={
                'class': 'form-control'
            }),
            'availability': forms.fields.Select(attrs={
                'class': 'form-control'
            })
        }

 Этот файл имеет решающее значение, поскольку он содержит информацию о нашей форме и о том, как она будет отображаться в шаблоне.

  • Строка 5: Мы добавляем новый класс, вызываемый AddBookForm после forms.py создания файла. Это потомок класса ModelForm. У нас также есть возможность использовать класс Form для создания form с нуля.
  • Строка 6: В этом классе существует мета класс . Здесь мы укажем модель, которую хотим использовать, а также поле, которое хотим преобразовать в поле ввода HTML.
  • Строка 8: Мы говорим Catalog модели использовать все поля. Однако мы предлагаем некоторые варианты настройки. Атрибут класса form-control добавляется в HTML-форму. Это поможет нам настроить форму позже, чтобы она выглядела презентабельно.

Далее мы внесем некоторые изменения в файл views.py:

from django.shortcuts import render
from .forms import AddBookForm


def home(request):
    add_book_form = AddBookForm()

    return render(request, 'index.html', {
        "add_book_form": add_book_form,
    })
  • Строки 6 и 9: мы отображаем форму, которую создали ранее, в шаблоне с именем index.html.

Чтобы добавить этот шаблон, мы в папку templates создадим новый файл с именем index.html.

<!doctype html>
<html lang="en">
  <head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <!-- Bootstrap CSS -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">

    <title>Hello World</title>
  </head>
  <body>

    <div class="container">

      <h1>Hello World</h1>

        <form method="post">
          {% csrf_token %}

          {{ add_book_form.as_p }}

          <br>
          <div class="text-center">
            <input type="submit" class="btn btn-warning" style="width: 100%" value="Add Book">
          </div>
        </form>

    </div>


  </body>
</html>

Внутри /templates/index.html файла мы создаем форму с методом POST.

Различные поля ввода включаются с помощью {{ add_book_form.as_p }} переменной шаблона.

Скрытое поле CSRF также включается с помощью {% csrf_token %} тега шаблона.

Некоторые из стилей по умолчанию выполняются с помощью Bootstrap 5 CSS. Вот почему наша форма имеет класс form-control.

Запускаем тесты

Код формы успешно написан. Мы можем повторно запустить тесты, чтобы убедиться, что они успешно пройдены, используя следующие инструкции:

  • python manage.py test elibrary_app.tests.CatalogFormTests.test_book_form
  • python manage.py test elibrary_app.tests.CatalogFormTests.test_bootstrap_class_used_for_default_styling
  • python manage.py test elibrary_app.tests.CatalogFormTests.test_book_form_validation_for_blank_items

Запустите глобальный тест, чтобы убедиться, что все тесты проходят с помощью этой команды:

  • python manage.py test


Будьте вежливы и соблюдайте наши принципы сообщества. Пожалуйста, не оставляйте решения и подсказки в комментариях, для этого есть отдельный форум.
Оставить комментарий
Нет обсуждений. Начните первое.