РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
473 of 818 menu

Валидатор validate_slug

Валидатор validate_slug используется для проверки того, что строка соответствует формату slug. Slug - это строка, состоящая только из букв латинского алфавита (в нижнем регистре), цифр, дефисов и символов подчеркивания. Этот валидатор часто применяется в формах для полей, которые должны содержать URL-дружественные значения, такие как идентификаторы, названия страниц или категорий. Валидатор вызывается при валидации формы и в случае несоответствия формату выбрасывает исключение ValidationError.

Синтаксис

validate_slug(value)

Валидатор принимает один обязательный параметр:

  • value - строка, которую необходимо проверить на соответствие формату slug.

Валидатор не возвращает значение, а в случае ошибки выбрасывает исключение ValidationError с соответствующим сообщением.

Пример . Использование в форме

Рассмотрим пример использования валидатора validate_slug в поле формы:

from django import forms from django.core.validators import validate_slug class CategoryForm(forms.Form): name = forms.CharField(max_length=50) slug = forms.CharField(max_length=50, validators=[validate_slug]) def clean(self): cleaned_data = super().clean() return cleaned_data

В этом примере поле slug будет проверяться валидатором validate_slug при вызове метода is_valid формы.

Пример . Валидация

Проверим, как работает валидатор на корректных и некорректных данных:

from django.core.validators import validate_slug from django.core.exceptions import ValidationError # Проверка корректного slug try: validate_slug("my-awesome-category_123") print("Validation passed") except ValidationError as e: print(f"Validation error: {e}") # Проверка некорректного slug (с пробелом) try: validate_slug("my awesome category") print("Validation passed") except ValidationError as e: print(f"Validation error: {e}")

Результат выполнения кода:

"Validation passed" "Validation error: ['Enter a valid “slug” consisting of letters, numbers, underscores or hyphens.']"

Пример . С ModelForm

Валидатор validate_slug также можно использовать в ModelForm для проверки поля модели:

from django.db import models from django import forms from django.core.validators import validate_slug class Article(models.Model): title = models.CharField(max_length=200) slug = models.SlugField(max_length=50) def __str__(self): return self.title class ArticleForm(forms.ModelForm): class Meta: model = Article fields = ['title', 'slug'] def clean_slug(self): slug = self.cleaned_data.get('slug') validate_slug(slug) return slug

В этом примере валидатор validate_slug вызывается в методе clean_slug, что позволяет выполнить дополнительную проверку поля перед сохранением модели.

Пример . Обработка ошибок

Покажем, как обрабатывать ошибки валидации при работе с формой в представлении:

from django.shortcuts import render, redirect from .forms import CategoryForm def create_category(request): if request.method == 'POST': form = CategoryForm(request.POST) if form.is_valid(): # Сохранение категории return redirect('category_list') else: form = CategoryForm() return render(request, 'create_category.html', {'form': form})

Если пользователь введет в поле slug недопустимые символы (например, пробелы или специальные знаки), форма не пройдет валидацию, и пользователь увидит сообщение об ошибке.

Смотрите также

  • валидатор validate_unicode_slug,
    который проверяет строку на соответствие формату slug с поддержкой Unicode
  • валидатор RegexValidator,
    который проверяет строку по регулярному выражению
  • валидатор MaxLengthValidator,
    который проверяет максимальную длину строки
  • валидатор MinLengthValidator,
    который проверяет минимальную длину строки
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить