Чтобы зарегистрировать пользователей в моем веб-приложении Django, я создал функцию, которая отправляет криптографически подписанную ссылку на уже подтвержденные адреса электронной почты, которая позволяет им получить доступ к странице регистрации пользователя.Следующий шаг - убедиться, что срок действия ссылки истекает через определенное время, но это оказывается сложнее, чем ожидалось.
Из-за этого я использовал встроенную функцию Django Signer,и теперь идея состоит в том, чтобы преобразовать это в функцию TimestampSigner.Для этого я прочитал и следую: https://docs.djangoproject.com/en/2.2/topics/signing/#verifying-timestamped-values
Вот мой код:
в models.py:
class GenerateUserRegistration(models.Model):
signer = TimestampSigner(sep='/', salt='users.GenerateUserRegistration')
def get_registration_url(self, pk):
signed_pk = self.signer.sign(pk)
domain = Site.objects.get_current().domain
path = str(reverse('register', kwargs={'signed_pk': signed_pk}))
registration_url = 'http://{domain}{path}'.format(domain=domain, path=path)
return registration_url
в views.py:
def register(request, signed_pk):
try:
pk = GenerateUserRegistration.signer.unsign(signed_pk, max_age=30)
confirmed = Program.objects.get(id=pk)
except (BadSignature, GenerateUserRegistration.DoesNotExist):
raise Http404(signed_pk)
def generate_user_registration_email(request):
...
UserGenerator = GenerateUserRegistration()
user_registration_url = UserGenerator.get_registration_url(pk)
send_mail('app specific data')
...
в URL-адресе:
"NoReverseMatch at / admin / generate-user-registration Оборот для 'register' с аргументами ключевого слова '{' signature_pk ':' 1 / 1hUBvf / 3EiPZDorfNCqovGyDjoO - 9oyTQ '}' не найден.Попробован 1 шаблон (ов): ['register / (? P [0-9] + / [A-Za-z0-9 _ = -] +) / $'] "
Это приводитМне кажется, что я каким-то образом должен изменить URL-адрес соответствующим образом, чтобы приспособить TimestampSigner, но я не могу найти ничего в документации, ни где-либо еще, по этому поводу.Что нужно изменить там, чтобы это работало?
Заранее спасибо!