使用类视图登录/退出标准Django用户的问题

2024-04-25 21:18:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建一个简单的应用程序,只允许登录现有用户和注销,如果登录。在

在视图.py在

from django.views.generic.edit  import FormView
from django.views.generic       import DetailView

from django.contrib.auth        import logout
from django.contrib.auth.models import User
from django.contrib.auth.forms  import AuthenticationForm

from django.core.urlresolvers   import reverse_lazy

from django.http                import HttpResponseRedirect


class UserDetailView( DetailView ):
    model = User
    template_name = "main/user_detail.html"

class UserLoginView( FormView ):
    form_class = AuthenticationForm
    success_url = reverse_lazy("UserDetails")
    template_name = "main/user_form.html"

def logout_view(request):
    logout(request)
    return HttpResponseRedirect('/login/')

在网址.py在

^{pr2}$

用户_表单.html在

{% if user.is_authenticated %}
<a href="{% url 'Main:UserLogOut' %}">Logout</a>
{{ user.username }}
{% else %}

<form method='post'> {% csrf_token %}
    <table>
        {{ form.as_table }}
    </table>
    <input type='submit' value='Submit'>
</form>

{%endif%}

我不知道为什么,但是服务器返回这个错误

Request Method:     POST
Request URL:    http://0.0.0.0:9000/login/
Django Version:     1.6.5
Exception Type:     NoReverseMatch
Exception Value:    

Reverse for 'UserDetails' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []

怎么了?在


升级版 我尝试了这个肮脏的黑客攻击success_url = reverse_lazy("Main:UserDetails", kwargs={ 'pk':1 } ),只是为了检查它是否有效。我还补充了

{% if user.is_authenticated %}
Hooray!
{% else %}
What the hell???
{% endif %}

对用户_详细信息.html不知为什么得到了什么???而不是万岁! 为什么身份验证表单并没有真正对用户进行身份验证?在


Tags: django用户fromimportformauthurlhtml
2条回答

在你的urlconf中的这一行

url( r'users/(?P<pk>\d+)/', views.UserDetailView.as_view(), name="UserDetails"),

您将UserDetails的url定义为“something/users/pk”。但是,您没有为该url提供pk参数。这就是为什么你的错误说找不到相反的结果,因为它试图找到一个没有参数的模式。在

有几种方法可以修复您的错误,但我认为最好的解决方案是将pk参数设为可选,如下所示:

^{pr2}$

希望这有帮助。在

我认为问题出在这个声明中

success_url = reverse_lazy("UserDetails")

您需要提供user pk来反转_lazy args,因为URL的格式是“users/user_id/”。 所以不可能找到正确的成功网址。在

相关问题 更多 >

    热门问题