Уважаемые всезнающие существа в 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/
Есть ли исправление для этого, или я подхожу к этому с неправильной точки зрения?
Заранее спасибо!
Я только что понял, что для того, чтобы изменить его на стороне клиента, очевидно, мне нужна переадресация (почему я не подумал об этом...). Однако было бы полезно иметь возможность переписать его только на стороне сервера без нового запроса, например, для доступа к персонализированному изображению.
P.s.: подробнее, если нужно, можно пропустить
Я работаю над сайтом, который (будет) отправлять персонализированные электронные письма пользователям. Я хотел бы, чтобы пользователи могли щелкать ссылки в электронной почте и автоматически входить в систему с помощью токена в ссылке электронной почты. Это в дополнение к обычному входу в систему. (Я знаю, что это менее безопасно, потому что люди могут пересылать электронные письма, но этого достаточно для моего сайта). 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
Прямо сейчас он работает с перенаправлениями, я также хотел бы иметь возможность делать это внутри.