URL утверждения в Django
У меня есть приложение Django, где пользователи должны попросить менеджеров присоединиться к какой-либо группе.
Мне нужно иметь возможность отправить письмо с подтверждением менеджеру с URL, который одобряет конкретного пользователя
присоединиться к определенной группе.
Как создать такой URL и как я идентифицирую пользователя и группу после нажатия на этот URL?
Может быть, у вас есть ссылка, где я могу прочитать?
Спасибо, Аршавский Александр.
2 ответа
Для получения электронного письма с подтверждением вы можете отправить идентификатор пользователя (либо в чистом виде (id = 1, либо в хеше) (если для хэша требуется время, чтобы добавить соль, например, id = 356a192b7913b04c54574d18c28d46e6395428ab), руководителю группы.
Затем, когда менеджер группы нажимает на ссылку, он перенаправляется на свою "панель инструментов" с пользователем, предварительно выбранным для утверждения (вы можете перечислить все запросы пользователя на этой странице (еще не утвержденные))
И тогда менеджер группы может разрешить или запретить доступ для пользователя (для отдельной группы или нескольких групп)
Вот как создать уникальный ключ для запроса
from random import random
from django.utils.hashcompat import sha_constructor
invite_salt = sha_constructor(str(random())).hexdigest()[:5]
invite_key = sha_constructor("|".join([admin_salt, email, url])).hexdigest()
Затем сохраните это в поле на модели, вы можете назвать его ApprovalRequest. Тогда вы можете построить вид, как
def approve(request, admin_key):
approval_request = get_object_or_404(ApprovalRequest, invite_key=admin_key)
ApprovalRequest должен содержать ForeignKey для пользователя, который инициировал его, и группу, к которой он хотел присоединиться, чтобы вы могли обработать его соответствующим образом на этом этапе, после чего пометьте запрос на утверждение как завершенный.
Чтобы получить URL для этого одобренного представления, вы можете использовать reverse('Approve', admin_key), предполагая, что вы отобразили представление следующим образом в urls.py
url(r"^approve/([^/]+)/", 'example.views.approve', name='approve')