Валидатор 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,
который проверяет минимальную длину строки