Han*_*ong 3 django redirect login decorator
如果我的用户没有登录并遇到@login_required装饰器,它将被发送到我的login_user视图.登录后,它将被发送到我的索引.我怎样才能重定向到上一页.
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))
Run Code Online (Sandbox Code Playgroud)
现在我一直在看:Django:登录后重定向到上一页 但我不知道如何使用它,因为我没有发送他们登录链接,但有装饰
该login_required装饰诠释按登录网址添加一个next字段的GET参数.请参阅login_required.
例如,如果LOGIN_URL是/login它成为/login?next=/polls/3/vote
这将传递到您使用它的登录视图
以请求意识的方式在GET或errorneos POST上呈现登录页面.请注意,您需要将请求变量传递给模板rendercontext.请参阅RequestContext和render_to_response.
return render_to_response(
'login.html',
my_data_dictionary,
context_instance=RequestContext(request)
)
Run Code Online (Sandbox Code Playgroud)在模板中添加这样的行到登录表单
<input type="hidden" name="next" value="{{ next }}">
Run Code Online (Sandbox Code Playgroud)最后,一个成功的POST使用此值HttpResponseRedirect,或者如果没有值next,LOGIN_REDIRECT_URL则使用next值的值.请参阅HttpResponseRedirect.
... user was succesfully authenticated...
if request.POST["next"] is Not "":
HttpResponseRedirect(request.POST["next"])
else:
HttpResponseRedirect(settings.LOGIN_REDIRECT_URL)
Run Code Online (Sandbox Code Playgroud)我希望这会澄清一些事情.
| 归档时间: |
|
| 查看次数: |
3323 次 |
| 最近记录: |