Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 登录后重定向回上一页(Django)_Python_Django - Fatal编程技术网

Python 登录后重定向回上一页(Django)

Python 登录后重定向回上一页(Django),python,django,Python,Django,我已经在几个页面中创建了登录页面强制登录。现在我需要重定向回前一页后成功登录 当我通过@login\u required(login\u url='/login/')强制登录时。它在查询字符串中包含next参数 我试图用redirect\u to=request.request.get('next','')捕获它,并将它发送到redirectreturn-HttpResponseRedirect(redirect\u to),但没有成功 view.py def login(request):

我已经在几个页面中创建了登录页面强制登录。现在我需要重定向回前一页后成功登录

当我通过
@login\u required(login\u url='/login/')强制登录时
。它在查询字符串中包含
next
参数

我试图用
redirect\u to=request.request.get('next','')捕获它,并将它发送到redirect
return-HttpResponseRedirect(redirect\u to)
,但没有成功

view.py

def login(request):
    def errorHandle(error):
        form = LoginForm()
        return render_to_response('login/login.html', {
            'error' : error,
            'form' : form,
            })
    if request.method == 'POST': # If the form has been submitted...
        form = LoginForm(request.POST) # A form bound to the POST data
        if form.is_valid(): # All validation rules pass
            username = request.POST['username']
            password = request.POST['password']
            redirect_to = request.REQUEST.get('next', '')
            user = authenticate(username=username, password=password)
            if user is not None:
                if user.is_active:
                    # Redirect to a success page.
                    auth_login(request, user)
                    return HttpResponseRedirect(redirect_to)
#                    return render_to_response('login/logged_in.html', {
#                        'username': username,
#                        })
                else:
                    # Return a 'disabled account' error message
                    error = u'Account Disabled'
                    return errorHandle(error)
            else:
            # Return an 'invalid login' error message.
                error = u'Invalid Login'
                return errorHandle(error)
        else:
            error = u'Form is Invalid'
            return errorHandle(error)
    else:
        form = LoginForm() # An unbound form
        return render_to_response('login/login.html', {
            'form': form,
            })
模板

<div id="login_form">
<form action="." method="post">
    {{ form.as_p }}
    <input type="submit" value="Login">
</form>
</div>

{{form.as_p}}
编辑-我发现了问题。我的模板有问题。下面的表格很好用

    <form action="" method="post">
        <label for="username">User name:</label>
        <input type="text" name="username" value="" id="username">
        <label for="password">Password:</label>
        <input type="password" name="password" value="" id="password">

        <input type="submit" value="Login" id="button"/>
        <input type="hidden" name="next" value="{{ next|escape }}" />
    </form>

用户名:
密码:

您可以将以下内容添加到表单中:

<input type="hidden" value="{% if request.REQUEST.next %}{{ request.REQUEST.next }}{% else %}{% if request.META.HTTP_REFERER %}{{ request.META.HTTP_REFERER }}{% else %}/{% endif %}{% endif %}" name="next" />

以下是它处理的案例:

  • 如果用户来自需要登录的视图:下一步由需要登录设置
  • 如果用户来自登录表单(即身份验证未通过):next=先前设置的next值
  • 如果用户来自非登录视图,则需要查看:下一步=参考url
  • 如果用户直接打开登录页面:下一步=/
  • 请注意,这也适用于您应该使用的外部登录视图

    作为一个好东西,这里是我的注销模板的一部分,它将用户重定向到他注销前的页面

    {% block body %}
        <p>{% trans "You've been logged out." %}</p>
        {% if '/account/logout/' not in request.META.HTTP_REFERER %}
        <p>
            {% trans 'You will be redirected in a second' %}
        </p>
        {% endif %}
    {% endblock %}
    
    {% block extra_body %}
        {% if '/account/logout/' not in request.META.HTTP_REFERER %}
            <script type="text/javascript">
            document.location.href = '{{ request.META.HTTP_REFERER }}';
            </script>
        {% endif %}
    {% endblock %}
    
    {%block body%}
    {%trans“您已注销。”%}

    {%if'/account/logout/'不在request.META.HTTP_REFERER%} {%trans'您将在第二个“%”中被重定向

    {%endif%} {%endblock%} {%block extra_body%} {%if'/account/logout/'不在request.META.HTTP_REFERER%} document.location.href='{{request.META.HTTP_REFERER}}'; {%endif%} {%endblock%}

    我要感谢雇用我的伟大创业公司,因为他们允许我分享代码,并利用我的一些时间帮助他人。但是我链接它的真正原因是为了让你可以测试它。如果此代码不适合您,就像它在那里一样,那么您还有另一个问题。

    为什么不使用内置视图?为什么不至少看看它是如何实现重定向的?@DrTyrsa我不知道如何使用内置登录:/你能找到这个代码的问题吗?你读过auth吗?有什么不清楚的地方吗?@DrTyrsa我在哪里可以获得auth的/account/files。同样的问题:重新发明有什么意义?我想教育目的是合理的。就我个人而言,我已经多年没有做任何与登录视图相关的事情了,我一直忙于关注是什么让我的应用与众不同。。。感谢Pinax提供了包含所有这些样板文件的入门项目。但在此之前,我确实手动完成了这项工作,这有助于我理解正在发生的事情。我认为,研究内置视图的代码对于教育目的更有用。例如,您可以了解有关测试cookie和重定向安全检查的信息。@jpic我已将您的代码添加到表单模板中。它说“在呈现时捕获到NoReverseMatch:为'me'反向,未找到参数'()'和关键字参数'{}”。@DrTyrsa:感谢您的反馈,最后我同意您的意见,并粘贴了一个a实际实现的解决方案。它简单而愚蠢,依赖于模板和经典的“next”参数支持。答案是IMHO,现在好多了,谢谢分享你的一些见解。