登录在django中不起作用

时间:2014-11-20 12:48:12

标签: python django

我想使用数据库中的用户名和密码登录。我得到错误'对象没有属性'验证'。

我的views.py

代码
def login(request):
    c = {}
    c.update(csrf(request))
    return render_to_response('polls/login.html', context_instance=RequestContext(request))

def auth(request):
    username = request.POST.get('username', '')
    password = request.POST.get('password', '')
    user = auth.authenticate(username=username, password=password)
    if user is not None:
        auth.login(request, user)
        return HttpResponseRedirect('polls/create')
    else:
        return HttpResponseRedirect('polls/login')

我的login.html:

    <form action="/polls/auth/" method="post">
        {% csrf_token %}
        <label for = "username"> User name: </label>
        <input type="text" name="username" value="" id="username">
        <label for="password" > Password: </label>
        <input type="text" name="password" value="" id="password">

        <input type="submit" value="login">
    </form>

2 个答案:

答案 0 :(得分:2)

您的视图功能 auth 会覆盖 auth 功能。

例如,如果我导入 sys 并创建一个与 sys 相同的函数名称,那么它将覆盖其在本地命名空间中的功能。

>>> import sys
>>> sys.path[0]
''
>>> sys.path[1]
'/usr/local/lib/python2.7/dist-packages'
>>> def sys():
...     return "Hello"
... 
>>> sys.path
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'function' object has no attribute 'path'

只需将您的视图功能名称 auth 更改为其他名称。

OR

尝试使用其他名称导入身份验证功能。

from django.contrib import auth as django_auth

def auth(request):
    username = request.POST.get('username', '')
    password = request.POST.get('password', '')
    user = django_auth.authenticate(username=username, password=password)
    if user is not None:
        django_auth.login(request, user)
        return HttpResponseRedirect('polls/create')
    else:
        return HttpResponseRedirect('polls/login')

答案 1 :(得分:0)

您的函数名称为'auth',这与您要导入的'auth'模块冲突。更改您的函数名称,或者您可以使用'as'导入语法:

from django.contrib import auth as django_auth

然后在你的函数中使用它:

user = django_auth.authenticate(username=username, password=password)