当您想将用户返回到 Django 中的同一页面时,有哪些选项,每个选项的优缺点是什么?
我知道的方法:
- HTTP_REFERER
- 包含前一个 URL 的 GET 参数
- 用于存储先前 URL 的会话数据
还有其他的吗?
当您想将用户返回到 Django 中的同一页面时,有哪些选项,每个选项的优缺点是什么?
我知道的方法:
还有其他的吗?
一种方法是使用HTTP_REFERER
如下标头:
from django.http import HttpResponseRedirect
def someview(request):
...
return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
不确定这个的缺点!
虽然问题和答案很旧,但我认为它缺乏一些选择。我没有发现这些方法有任何缺点,我很乐意知道是否有任何缺点?
from django.shortcuts import redirect
redirect(request.path_info) # No query parameters
redirect(request.build_absolute_uri()) # Keeps query parameters
redirect(request.get_full_path()) # Keeps query parameters
100% 工作示例
对于基于类的视图和功能:
from django.http import HttpResponseRedirect
...
return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
或者
from django.http import HttpResponseRedirect
...
return HttpResponseRedirect(self.request.META.get('HTTP_REFERER'))
例子 -
class TaskNotificationReadAllView(generic.View):
def get(self, request, *args, **kwargs):
TaskNotification.objects.filter(assigned_to=request.user).update(read=True)
print(request.META.get('HTTP_REFERER'))
return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
在 django 视图中,假设您未登录,但单击某些内容触发某些 url 的内容,例如 /board/2/new_topic 然后 @login_required 将使用此 url 将您重定向到登录页面
http://localhost:8000/signin/?next=/boards/2/new_topic/
所以我们的目标是在成功登录后重定向到 http://localhost:8000/boards/2/new_topic/ 页面所以我们必须添加一行
if 'next' in request.GET:
return redirect(request.GET['next'])
然后如果它下一个在那里,那么它将根据其他正常重定向重定向。
视图.py:
def signin(request):
if request.method == "POST":
user_login_form = UserLoginForm(request.POST)
email = request.POST['email']
password = request.POST['password']
user = authenticate(request, email=email, password=password)
if user and user.is_active:
login(request, user)
if 'next' in request.GET:
return redirect(request.GET['next'])
else:
return redirect('home')
else:
return render(request, 'signin.html', context={'form': user_login_form})
else:
user_login_form = UserLoginForm()
return render(request, 'signin.html', context={'form': user_login_form})