gpt4 book ai didi

django - 登录和重定向

转载 作者:行者123 更新时间:2023-12-02 06:20:46 25 4
gpt4 key购买 nike

这是我的登录 View :

def login(request):

redirect_to = request.REQUEST.get("next")
if request.method == 'POST':

formL = LoginForm(data=request.POST)
if formL.is_valid():

if not redirect_to or '//' in redirect_to or ' ' in redirect_to:
redirect_to = "/blogs/"

from django.contrib.auth import login
login(request, formL.get_user())
if request.session.test_cookie_worked():
request.session.delete_test_cookie()
return HttpResponseRedirect(redirect_to)

else:

formL = LoginForm(request)

request.session.set_test_cookie()

return render_to_response('blogs.html', {
'formL': formL, }, context_instance=RequestContext(request))

登录= never_cache(登录)

例如,当我访问 example.com/myblog/时,我会被重定向到 example.com/accounts/login/?next=/myblog/

但是当我插入用户和 psw 进行登录时,我已被重定向到/blogs/而不是/myblog/

为什么?

编辑: request.REQUEST.get('next', '') 始终返回 ''

我不知道为什么:-\

最佳答案

您的登录表单模板是什么样的?

您的问题

您没有将 redirect_to 路径发送到您的模板,但您应该这样做。您的返回应如下所示:

return render_to_response('blogs.html', {
'formL': formL,
'next': redirect_to,
}, context_instance=RequestContext(request)
)

登录表单操作应如下所示:

<form action="/your_login_url/?next={{ next }}" method="post">

因此,当您转到 /myblog/ 时,您会被重定向到 /your_login_url/?next=/myblog/,然后登录 View 将呈现登录表单并替换登录表单操作属性中的 next 变量,因此它看起来像 /your_login_url/?next=/myblog/ ,当您提交表单时,您会登录并重定向到 /myblog/ (执行 if request.method == 'POST': 之后的内容)。

在您看来,当您仅GET登录页面但POST<时,redirect_to = request.REQUEST.get("next")工作正常 GET 中没有设置 next 变量。

另请注意

登录 View 不应呈现您的博客,博客 View 应该呈现您的博客。

这就是 Django 返回的响应的样子,请注意其中显示 redirect_field_name:redirect_to, 的行,redirect_field_name 的值为 next默认情况下。

return render_to_response(template_name, {
'form': form,
redirect_field_name: redirect_to,
'site': current_site,
'site_name': current_site.name,
}, context_instance=RequestContext(request))

而且,您似乎仅针对默认重定向覆盖登录 View ?恕我直言,这是不对的。设置登录重定向默认位置的正确位置是在 settings.py 中设置 LOGIN_REDIRECT_URL .

但是,既然您正在编写自己的登录 View ,为什么不使用 django 中的登录 View 作为骨架,然后在其上扩展您需要的内容。

关于django - 登录和重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2825588/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com