Django:下一个值在登录页面中奇怪地改变

zpgglvta  于 2023-06-25  发布在  Go
关注(0)|答案(2)|浏览(92)

我想重定向我的应用程序中的用户到他们的用户页面,如果他们已经登录,并试图直接进入“../login/”。我找到了这个答案:
Django: Redirect logged in users from login page
它工作得很好,直到我决定点击“注册”链接,我下面我的登录字段。我不知道为什么,但当我击中它,我得到重定向到登录页面再次,但唯一的变化是网址,出于某种原因,它成为“http://localhost:8000/users/login/?next=/users/register/”,它不会带我到我的注册页面。
如果我在登录模板中用另一个url设置了“next”变量,为什么它会发生变化:

{% extends "base.html" %}
    {% block title %}User Login{% endblock %}
    {% block head %}User Login{% endblock %}
    {% block content %}
        {% if form.errors %}
            <p>User name or password is incorrect.</p>
        {% endif %}
        <form method="post" action="{% url login %}">
            {% csrf_token %}
            <p><label for="id_username">Username:</label>
                {{ form.username }}</p>
            <p><label for="id_password">Password:</label>
                {{ form.password }}</p>
            <input type="submit" value="Login" />
            <input type="hidden" name="next" value="users/"/>
        </form>
            <li><a href="/users/register/">Register</a></li>
    {% endblock %}

我用的是Django1.4和Python 2.7。我的urls.py是:
对于整个应用程序:

urlpatterns = patterns('',
    url(r'^$', main_page, name="main_page"),
    url(r'^users/',include('user_manager.urls')),
)

对于user_manager模块:

urlpatterns = patterns('user_manager.views',
    url(r'^$', users, name="user_page"),
    url(r'^logout/$', user_logout, name="logout"),
    url(r'^login/$', user_login, name="login"),
    url(r'^(\w+)/$', user_page),
    url(r'^register/$', register_page),
)
v7pvogib

v7pvogib1#

你在那个register_page视图上有一个@login_required装饰器吗?如果是,就把它去掉

3bygqnnd

3bygqnnd2#

好的,我找到问题了。Django会按顺序检查url正则表达式,以便“register”url匹配用于用户页面的“(\w+)/”。所以我所要做的就是把这个网址放在最后,urls.py现在看起来像这样:

urlpatterns = patterns('user_manager.views',
    url(r'^$', users, name="user_page"),
    url(r'^logout/$', user_logout, name="logout"),
    url(r'^login/$', user_login, name="login"),
    url(r'^register/$', register_page),
    url(r'^(\w+)/$', user_page),
)

尽管如此,我还是不太明白为什么错误的匹配会改变下一个值。我知道这是原因,但我不知道为什么...
非常感谢您的宝贵时间!

相关问题