这是我的登录的观点:

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为登录然后我已经重定向到/博客/和不/ myblog /

为什么?

编辑:request.REQUEST.get( '下', '')总是返回 ''

我不知道为什么: - \

有帮助吗?

解决方案

如何登录表单模板是什么样子?

您的问题

您没有发送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/,登录视图然后呈现登录表单和替换登录表单action属性的next变量,因此它看起来像/your_login_url/?next=/myblog/,当你提交表单你得到登录和重定向到/myblog/if request.method == 'POST':后的东西被执行)。

在你看来,redirect_to = request.REQUEST.get("next")正常工作时,你只GET登录页面,但是当你POST它没有在GET变量next集。

同时注意

登录而不应该使你的博客,博客查看应该这样做。

这是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))

和,你似乎只重写默认重定向登录看法?这是不对的恕我直言。 正确的地点设置默认位置登录重定向在你的settings.py设置的 LOGIN_REDIRECT_URL

但是,既然你正在写自己的登录视图为什么不使用一个在Django作为骨架,然后在其上展开您所需要的。

其他提示

由于

 not redirect_to or '//' in redirect_to or ' ' in redirect_to

评估为真?


也许,如果我们教人以渔? http://docs.python.org/library/logging.html

将这个在顶部

import logging
LOG_FILENAME = '/tmp/logging_example.out'
logging.basicConfig(filename=LOG_FILENAME,level=logging.DEBUG)

将这个地方似乎在代码中适当的(如if语句后)

logging.debug("redirect_to = %s" % redirect_to)

运行它,然后看看 '/tmp/logging_example.out'

的内容
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top