Для создания правильного 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
, где вы можете проверить, действительна ли ссылка, и предоставить соответствующую обработку.