django登录后返回最后一页
如果我的用户未登录并且遇到@login\u必需的装饰程序,它将被发送到我的login\u用户视图。登录后,它将被发送到我的索引。如何重定向到上一页django登录后返回最后一页,django,redirect,login,decorator,Django,Redirect,Login,Decorator,如果我的用户未登录并且遇到@login\u必需的装饰程序,它将被发送到我的login\u用户视图。登录后,它将被发送到我的索引。如何重定向到上一页 def login_user(request): login_form = LoginForm(request.POST or None) if request.POST and login_form.is_valid(): user = login_form.login(request) if use
def login_user(request):
login_form = LoginForm(request.POST or None)
if request.POST and login_form.is_valid():
user = login_form.login(request)
if user:
login(request, user)
if request.POST['next'] != "":
return HttpResponseRedirect(request.POST['next'])
else:
return HttpResponseRedirect(reverse('index'))
#return render(request, 'login.html', {'login_form': login_form })
return render_to_response('login.html', {'login_form': login_form}, context_instance=RequestContext(request))
现在我一直在看:
但是我不知道如何使用它,因为我没有用链接发送他们登录,而是用修饰符来登录。所需的
login\u
decorator注释登录url,并在GET参数中添加next
字段。看
e、 g.如果LOGIN\u URL
为/LOGIN
则变为/LOGIN?next=/polls/3/vote
这将传递到您的登录视图,您可以在其中使用它
<input type="hidden" name="next" value="{{ next }}">
我希望这能澄清一些问题。我做了以下工作:
def login_user(request):
login_form = LoginForm(request.POST or None)
if request.POST and login_form.is_valid():
user = login_form.login(request)
if user:
login(request, user)
return HttpResponseRedirect(request.POST.get('next', reverse('index')))
return render(request, 'login.html', {'login_form': login_form, 'next': request.GET.get('next', '') })
#return render_to_response('login.html', {'login_form': login_form, 'next': request.GET.get('next', '')}, context_instance=RequestContext(request))
还包括
<input type="hidden" name="next" value="{{ next }}">
在我的login.html登录表单中正确!否决权,这正是我想说的谢谢,我想我现在更好地理解了这个概念,以及为什么我被重定向到我的登录,我得到了例如:/login/?next=/admin/item/create/但是现在我不确定我如何给{next}值/admin/item/create/(仍然要转到我的登录重定向url)以及使用呈现(请求、,“”)快捷方式?它是由
login\u required
decorator自动完成的,只是因为它在那里。欢迎使用django magic;-)现在我想我离它更近了一步,添加了代码和hiddne字段。但不知怎的,我的{next}总是空的(通过尝试打印它来检查),它不是调试器。它为你的网站添加了一个工具栏(而settings.DEBUG
为True
)。它显示完整的呈现上下文、搜索的模板路径、执行的db查询等。这样,您就不用编写调试语句,而只需检查上下文变量是否存在以及它的值。将其包含在登录表单的登录模板中。编辑您的帖子以反映解决方案非常好,但最好在第二个代码块,这样人们可以比较错误的代码和正确的代码。如果你这样做,我会把你的问题向上投票:-)
def login_user(request):
login_form = LoginForm(request.POST or None)
if request.POST and login_form.is_valid():
user = login_form.login(request)
if user:
login(request, user)
return HttpResponseRedirect(request.POST.get('next', reverse('index')))
return render(request, 'login.html', {'login_form': login_form, 'next': request.GET.get('next', '') })
#return render_to_response('login.html', {'login_form': login_form, 'next': request.GET.get('next', '')}, context_instance=RequestContext(request))
<input type="hidden" name="next" value="{{ next }}">