JavaRush /Курси /Модуль 3: Django /Валідація форм: вбудовані валідатори

Валідація форм: вбудовані валідатори

Модуль 3: Django
Рівень 12 , Лекція 3
Відкрита

У цій лекції ми поговоримо про те, як захистити ваші застосунки від всіляких "шкідливих даних". Зустрічайте валідацію!

Поняття валідації даних

Валідація даних — це той самий могутній щит вашого додатку, який захищає його від некоректних або шкідливих даних. Валідація перевіряє, що дані відповідають очікуваному формату і вимогам. Це дозволяє не тільки уникнути помилок, але й захистити вашу базу даних від дивних (і часом навіть смішних) ін’єкцій на кшталт '); DROP TABLE users; --.

Ось приклад. Припустимо, ви зробили поле для введення електронної пошти, а користувач ввів "ялюблюпітон". Очевидно, це не електронна пошта. Щоб дані були коректними, нам потрібно переконатися, що користувач ввів значення у форматі something@example.com. Це і називається валідацією.

Де застосовується валідація у Django? Django Forms інтегрують валідацію прямо у свої поля. Це означає, що вам не доведеться вручну перевіряти кожне поле — достатньо використовувати вбудовані валідатори і розслабитися.

Коли ви викликаєте метод .is_valid() на формі, Django автоматично запускає валідацію для всіх полів.

Вбудовані валідатори Django

Django пропонує цілий арсенал вбудованих валідаторів. Наче у вас є коробка інструментів на всі випадки життя: навіть якщо не все одразу вам знадобиться, знати про їх існування дуже корисно.

Ось основні вбудовані валідатори, які можуть вам знадобитися:

  • EmailValidator: щоб ваше поле дійсно містило коректну адресу електронної пошти.
  • URLValidator: для перевірки коректності URL.
  • MinLengthValidator і MaxLengthValidator: для обмеження довжини рядків.
  • RegexValidator: для перевірки даних за допомогою регулярних виразів.

Використання вбудованих валідаторів

Давайте створимо просту форму реєстрації, використовуючи EmailValidator і MaxLengthValidator. Ця форма буде перевіряти, що введено коректну адресу електронної пошти та ім'я користувача не перевищує 30 символів.

from django import forms
from django.core.validators import EmailValidator, MaxLengthValidator

class RegistrationForm(forms.Form):
    username = forms.CharField(
        max_length=30,
        validators=[MaxLengthValidator(30)],
        label="Ім'я користувача"
    )
    email = forms.EmailField(
        validators=[EmailValidator(message="Введіть коректний email.")],
        label="Електронна пошта"
    )
    password = forms.CharField(
        widget=forms.PasswordInput,
        label="Пароль"
    )

Вбудовані валідатори в дії

Спробуємо інтегрувати цю форму в просте представлення та переконаємося, що валідація працює, як і очікувалося. Нехай буде просте представлення, що обробляє GET і POST запити.

from django.shortcuts import render
from django.http import HttpResponse
from .forms import RegistrationForm

def register(request):
    if request.method == 'POST':
        form = RegistrationForm(request.POST)
        if form.is_valid():
            # Тут буде код для обробки даних форми
            return HttpResponse("Реєстрація пройшла успішно!")
        else:
            return render(request, 'register.html', {'form': form})
    else:
        form = RegistrationForm()
    return render(request, 'register.html', {'form': form})

Шаблон register.html повинен відображати форму та помилки, якщо такі є:

<form method="post">
  {% csrf_token %}
  {{ form.as_p }}
  <button type="submit">Зареєструватися</button>
</form>

{% if form.errors %}
  <ul>
  {% for field in form %}
    {% for error in field.errors %}
      <li>{{ error }}</li>
    {% endfor %}
  {% endfor %}
  </ul>
{% endif %}

Спробуйте ввести некоректний email або занадто довге ім'я користувача, і ви побачите, як валідатори не дозволять даним пройти далі.

Обробка помилок валідації

Тепер, коли ми отримуємо помилки, потрібно їх правильно обробити та відобразити для користувача. Ніхто не любить загадкові повідомлення від системи, тож давайте навчимося робити повідомлення про помилки більш зрозумілими та дружніми.

Коли форма не проходить валідацію, вона повертає набір помилок. Ці помилки можна витягнути та відобразити у шаблоні. Ми вже бачили, як витягувати помилки з полів форми, але давайте заглибимося в це трохи більше.

У коді представлення ми можемо використовувати form.errors для виводу помилок. Ми вже відображали їх у шаблоні, але ось більш детальний спосіб:

{% if form.errors %}
  <ul class="error-list">
    {% for field in form %}
      {% for error in field.errors %}
        <li>{{ field.label }}: {{ error }}</li>
      {% endfor %}
    {% endfor %}
  </ul>
{% endif %}

Кастомізація повідомлень про помилки

Якщо вам не подобаються стандартні повідомлення про те, що "ця форма недопустима", ви можете змінити їх за допомогою атрибуту error_messages в описі полів форми.

username = forms.CharField(
    max_length=30,
    validators=[MaxLengthValidator(30)],
    label="Ім'я користувача",
    error_messages={
        'max_length': "Ім'я користувача не повинно перевищувати 30 символів."
    }
)

Тепер, якщо користувач введе занадто довге ім'я користувача, він побачить ваше кастомне повідомлення, а не стандартну фразу.

Підсумки

Ось і все на сьогодні! Тепер у вас є потужний інструмент для перевірки даних у ваших Django додатках. Валідація даних — це важливий етап розробки, і її правильна реалізація допоможе вам уникнути багатьох проблем у майбутньому.

Для більш глибокого вивчення валідації у Django, рекомендуємо ознайомитися з офіційною документацією Django.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ