2014-11-20 11 views
0

Я хочу войти в систему с именем пользователя и паролем, который находится в базе данных. Я получаю объект «ошибка» не имеет атрибута «authenticate».Логин не работает в 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> 
+0

сделал импортирования аутентификации, логин? – Abercrombieande

+0

от django.contrib import auth, yes – CapCapi

+0

Просьба вставить полную ошибку со следом. –

ответ

2

Ваше переопределение в аутентификации функциональности вашего вида функции Идента.

Например, если я импортировать 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 к какому-либо другому имени.

ИЛИ

Попробуйте импортировать ваши аутентификации функцию с другим именем.

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') 
+0

или, альтернативно, 'from django.contrib import auth как django_auth', а затем использовать' django_auth.authenticate' в представлении – Anentropic

+0

Да, это было бы решением, но лучше избегать использования импортированных имен или ключевых слов pyhon. –

+0

Спасибо Tanveer Alam! Но теперь я не перенаправляю меня на следующую страницу. Он будет продолжать путь и перенаправлять меня на страницу входа снова и снова. Пользователь и пароль существуют в БД. – CapCapi

0

Ваше имя функции - «auth», и это связано с модулем «auth», который вы импортируете. Изменение имени функции или вы можете использовать «как» синтаксис импорта:

from django.contrib import auth as django_auth 

, а затем использовать его в функции:

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