Как создать правильный reverse для временной ссылки?

Для создания правильного reverse для временной ссылки в Django вам понадобится следовать следующим шагам:

1. Установите приложение django.contrib.sites, если оно еще не установлено. В вашем файле settings.py добавьте 'django.contrib.sites' в список установленных приложений и укажите ID вашего сайта.

INSTALLED_APPS = [
    ...
    'django.contrib.sites',
    ...
]

SITE_ID = 1

2. Создайте модель для хранения временных ссылок. Ниже пример модели, которая содержит ссылку, время действия и другие необходимые вам поля.

from django.db import models
from django.contrib.sites.models import Site
from django.utils import timezone

class TemporaryLink(models.Model):
    link = models.CharField(max_length=200)
    expiration_date = models.DateTimeField()
    site = models.ForeignKey(Site, on_delete=models.CASCADE)

    def is_valid(self):
        return self.expiration_date > timezone.now()

3. Создайте представление для создания временной ссылки. В этом представлении вы будете создавать объект TemporaryLink, устанавливая дату окончания действия и сохраняя его.

from django.shortcuts import render
from django.http import HttpResponse
from django.urls import reverse
from django.utils import timezone
from .models import TemporaryLink

def create_temporary_link(request):
    expiration_date = timezone.now() + timezone.timedelta(days=1)  # пример: ссылка будет действительна в течение 1 дня
    temporary_link = TemporaryLink(link="example.com", expiration_date=expiration_date, site_id=request.site.id)
    temporary_link.save()
    reverse_url = reverse('temporary-link-detail', kwargs={'pk': temporary_link.pk})
    return HttpResponse(f"The temporary link is created: {reverse_url}")

4. Создайте представление для отображения временной ссылки. В этом представлении вы будете проверять, является ли ссылка действительной, и возвращать результат соответствующей обработки.

from django.shortcuts import get_object_or_404, render
from .models import TemporaryLink

def temporary_link_detail(request, pk):
    temporary_link = get_object_or_404(TemporaryLink, pk=pk)
    if temporary_link.is_valid():
        # обработка действительной ссылки
        return HttpResponse("The temporary link is valid.")
    else:
        # обработка недействительной ссылки
        return HttpResponse("The temporary link is expired.")

5. Создайте URL-шаблоны для ваших представлений. В файле urls.py в вашем приложении добавьте следующие строки:

from django.urls import path
from .views import create_temporary_link, temporary_link_detail

urlpatterns = [
    path('create-temporary-link/', create_temporary_link, name='create-temporary-link'),
    path('temporary-link/<int:pk>/', temporary_link_detail, name='temporary-link-detail'),
]

Теперь, когда вы вызываете представление create_temporary_link, он создаст объект TemporaryLink с временным URL-адресом и датой окончания действия, а затем вернет reverse URL этой временной ссылки. Вы можете использовать этот reverse URL в различных местах вашего приложения для дальнейшего использования. Когда пользователь переходит по созданной ссылке, его запрос будет перенаправлен на представление temporary_link_detail, где вы можете проверить, действительна ли ссылка, и предоставить соответствующую обработку.