Лучшая практика для проверки даты в url в django?

У меня есть система регистрации, где пользователи могут регистрировать несколько симптомов за любой день. Я получаю дату как slug в моем url, но мне нужно подтвердить ее. Какой способ является лучшим и почему?

  1. make a validator function in the class view and use it there

  2. add a hidden form field, and write a custom DateValidator for it?

Вы можете определить конвертер путей, который будет разбирать объекты date. Вы можете определить пользовательский шаблон с помощью:

# app_name/converters.py

class DateConverter:
    regex = '[0-9]{4}-[0-9]{2}-[0-9]{2}'
    format = '%Y-%m-%d'

    def to_python(self, value):
        return datetime.strptime(value, self.format).date()

    def to_url(self, value):
        return value.strftime(self.format)

Далее мы можем зарегистрировать этот конвертер путей [Django-doc] и работать с:

from app_name.converters import DateConverter
from django.urls import path, register_converter

register_converter(DateConverter, 'date')

urlpatterns = [
    # …
    path('some/path/<date:date>/', some_view),
    # …
]

Это передаст единственный date параметр представлению, который является date объектом, с которым вы можете работать:

def some_view(request, date):
    # …

Если вы таким образом посетите путь /some/path/2021-10-17, date станет объектом date(2021, 10, 17).

Вернуться на верх