Redirect некорректно преобразует специальные символы при перенаправлении в django
У меня есть страница в моем приложении django, которая требует аутентификации. Если пользователь нажимает mydomian/my_page, представление оценивает, аутентифицирован ли запрос. Если запрос аутентифицирован, то он будет перенаправлен на нужную html-страницу (my_page.html). Если запрос не аутентифицирован, запрос будет перенаправлен на страницу входа в систему с редиректом:
class MyView(View):
def get(self, request):
user = request.user
context = {
'username': user.username
}
if user.is_authenticated and user.is_staff:
return render(request,
'path/to/my_page.html',
context)
logout(request)
return redirect('/admin/login?next=/my_page')
Это работало довольно хорошо, когда неаутентифицированный пользователь нажимал mydomain/my_page, он направлялся на mydomain/admin/login/?next=/my_page, а после аутентификации он направлялся на mydomain/my_page, который обслуживал path/to/my_page.html.
Теперь я обновился до последней версии django, и перенаправление изменилось: когда неаутентифицированный запрос попадает на мою страницу, он перенаправляется на этот url mydomain/admin/login/?next=/admin/login%3Fnext%3D/my_path. Когда на этой странице происходит логин, страница перенаправляется на mydomain/admin вместо mydomain/my_page. Затем, когда я вызываю mydomain/my_page, она перенаправляется на нужную страницу (поскольку запрос аутентифицирован).
Я попробовал заменить перенаправление на
return HttpResponseRedirect((('/admin/login?next=/my_page').encode('utf-8')))
но не сработало. Я также не смог найти ничего в документации django о том, можно ли и как изменить метод перенаправления.
Есть идеи?
После просмотра документации здесь и здесь я понял, что редирект теперь хочет слеш после admin.
так что это return redirect('/admin/login/?next=/my_page') решило мою проблему. В противном случае он добавляет предоставленную ссылку к моему url.