Django登录消失了? (现在找到解决方案寻找解释)

时间:2014-05-06 17:10:22

标签: django authentication django-urls

好的,在稍微摆弄并安装debug_toolbar之后,删除以下行后问题就消失了,

urlpatterns = patterns('',
    # some other patterns
    url(r'^(?P<tag_name>.+)/$','myapp.views.tag_details',name = 'tag_details'),#<<---
    #!!! removing above line solves the problem
     ) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)


urlpatterns += patterns(
'django.contrib.auth.views',

url(r'^login/', 'login',
    {'template_name' : 'login.html'},
    name = 'constituency_login'),

url(r'^logout/', 'logout',
    {'next_page' : 'constituency_login'},
    name = 'constituency_logout'),

为什么它会破坏我的登录和注销模式?


我已经实施了一段时间的登录和注销,现在我突然尝试实现其他功能时,登录和注销都没有以某种方式显示。

我可以通过管理员登录,该网站可以显示我已登录但登录了#39;网址显示空白页面并退出&#39;什么都不做。

以下是我实施的方式:

项目文件夹中的urls.py

urlpatterns += patterns(
'django.contrib.auth.views',

url(r'^login/', 'login',
    {'template_name' : 'login.html'},
    name = 'myapp_login'),

url(r'^logout/', 'logout',
    {'next_page' : 'myapp_login'},
    name = 'myapp_logout'),
)

模板/ login.html的

{% extends "base.html" %}
{% load staticfiles %}

{% block content%}

{% if form.errors %}
<p class="alert"> Your username and/or password didn't match </p>
{% endif%}

<form method="post" action="{% url 'django.contrib.auth.views.login' %}">
{% csrf_token %}

        <div class="input-group ">
            <span class="input-group-addon" ><span class="glyphicon glyphicon-user"></span></span>
            <input type="text" class="form-control" placeholder="Username" id="{{ form.username.id_for_label }}" maxlength="30" name="{{ form.username.html_name }}" />

        </div>
        <div class="input-group ">
            <span class="input-group-addon" ><span class="glyphicon glyphicon-lock"></span></span>
            <input type="password" class="form-control" placeholder="Password" id="{{ form.password.id_for_label }}" name="{{ form.password.html_name }}" type="text" />
        </div>


<input class="btn" type="submit" value="login" />
<input type="hidden" name="next" value="{{ next }}" />
</form>
</div>
</div>
</div>
{% endblock %}

settings.py

LOGIN_URL = 'myapp_login'
LOGOUT_URL = 'myapp_logout'
LOGIN_REDIRECT_URL = 'index'

我还没有改变其中的任何一个。事实上,从那时起我就添加了多个功能。

1 个答案:

答案 0 :(得分:2)

Django总是返回urlpatterns中的第一个正则表达式匹配。您的tag_details视图的正则表达式与.+的所有非空模式匹配。当您的登录和退出网址位于网址模式中的tag_details视图之后,两个视图都会与您的tag_details视图匹配。

您必须确保您的tag_details视图在您的模式中排在最后,或者使用一些前缀,例如/tag/<tag>/。将正则表达式模式设置为尽可能限制也是一种好习惯。如果您不允许在标记名称中使用特殊字符,即斜杠等,则最好使用r'^(?P<tag_name>[\w]+)/$'之类的模式。