Дорогие вездесущие существа в Stackoverflow,
В Django 1.3 я создаю промежуточное программное обеспечение process_request, которое получает токен из URL-адреса, регистрирует пользователя (если оно верно) и удаляет токен из URL-адреса.Однако:
I) Django рекомендует не получать доступ к данным POST / GET в промежуточном программном обеспечении, я не совсем уверен, почему так ... То же самое относится к request.path?https://docs.djangoproject.com/en/dev/topics/http/middleware/#process-view
II) Я хочу удалить токен из URL, поэтому /album3/pic42/~53Cr3t70K3n/like/
-> /album3/pic42/like/
.Однако изменение request.path не работает.Страница не будет найдена, в то время как
Промежуточное программное обеспечение работает правильно (проверено печатью)
Непосредственный ввод /album3/pic42/like/
работает
Ошибка (с токеном) показывает Request URL: http://www.site.com/album3/pic42/like/
Есть ли исправление или я подхожу к этому с неправильного угла?
Заранее спасибо!
Я только что понял, что для того, чтобы изменить его на стороне клиента, очевидно, мне нужен редирект (почему я об этом не подумал ...).Тем не менее, было бы полезно иметь возможность переписать его только на стороне сервера без нового запроса, например, для доступа к персонализированному изображению.
Ps: дополнительные сведения, если необходимо, не стесняйтесь пропускать
Я работаю над сайтом, который (будет) отправлять персонализированные электронные письма пользователям.Я бы хотел, чтобы пользователи могли нажимать на ссылки в письме и автоматически входить в систему с помощью токена в ссылке на электронную почту.Это в дополнение к обычному входу в систему.(Я знаю, что это менее безопасно, потому что люди могут пересылать электронную почту, но этого достаточно для моего сайта).URL-адрес будет выглядеть примерно так: / album3 / pic42 / ~ 53Cr3t70K3n / like / (с http://www.site.com раздетым, это делает Django)
Я пишу промежуточное программное обеспечение, чтобы соответствовать этому и войти в систему пользователяв случае необходимости, сервер аутентификации для принятия токена в качестве действительных учетных данных и модель токена.
Функция промежуточного программного обеспечения process_request: def process_request (self, request):
if '/~' in request.path:
result = re.search('(.*)/~(.+?)/(.*)', request.path)
(uidb36, token) = result.group(2).split('-', 2)
user = authenticate(uidb36 = uidb36, token = token)
if user: login(request, user)
return HttpResponseRedirect('%s/%s' % (result.group(1), result.group(3)) + ('?' + '&'.join('='.join(item) for item in request.GET.items()) if request.GET else ''))
return None
Rightтеперь он работает с перенаправлениями, я бы тоже хотел сделать это внутренне.