2012-03-07 3 views
0

, когда я пытаюсь войти в систему я получаю сообщение об ошибке, которое говоритКак устранить ошибку целостности при попытке войти в систему. (Django)

duplicate key value violates unique constraint "auth_user_username_key" 
DETAIL: Key (username)=(mrfrasha) already exists. 

Я действительно не имеют ни малейшего представления, что это означает, что на всех , Кажется странным. это кажется ошибкой, вы получите его вы пытаетесь создать имя пользователя, который уже был в использовании, но я просто пытаюсь войти.

<form action="" method="POST"> 
Username: <input type="text" name="username" /> 
Password: <input type="text" name="password" /> 
<input type = "submit" value = "Login"/>< br /> 

def login(request): 
    if request.POST=='POST': 
     username = request.POST['username'] 
     password =request.POST['password'] 
     user = authenticate(username=username, password=password) 
     if user is not None: 
      if user.is_active: 
       login(request, user) 
       return render_to_response('profile.html') 
      else: 
       print "Your account has been disabled!"#come back to me 
     else: 
      sentence = "Your username and password were incorrect."# come back to me 
      return render_to_response('login.html', {'sentence':sentence}) 
    else: 
     return render_to_response('login.html')#come back to me 
+0

Вы уверены, что код, управляющий регистрацией, просто регистрируется на вашем пользователе? Кажется, он пытается создать другого пользователя с тем же уникальным ключом, что и существующий пользователь. Можете ли вы опубликовать код, который обрабатывает логин в файле views.py? – stephenmuss

+0

hopefulyy, который помогает –

ответ

4

Проблема, которая, по моему мнению, переопределяет функцию django login, объявляя функцию с тем же именем, которая затем становится рекурсивной, когда этот оператор будет выполнять login(request, user).

Поскольку ваша функция принимает только один параметр, поэтому login(request, user) это утверждение вызывает исключения, которые login() takes one argument and got two.

Измените название своей функции на другое, например. my_login (запрос)

Надеюсь, это поможет. Благодаря

EDITED

Ваша функция должна быть, как это.

def my_login(request): 
    if request.method=='POST': 
     username = request.POST['username'] 
     password =request.POST['password'] 
     user = authenticate(username=username, password=password) 
     if user is not None: 
      if user.is_active: 
       login(request, user) 
       return render_to_response('profile.html') 
      else: 
       print "Your account has been disabled!"#come back to me 
     else: 
      sentence = "Your username and password were incorrect."# come back to me 
      return render_to_response('login.html', {'sentence':sentence}) 
    else: 
     return render_to_response('login.html')#come back to me 
+0

. Это должно решить вашу другую проблему. – stephenmuss

+0

@Jack и, очевидно, вам нужно изменить имя функции в файле urls.py, который укажет на запрос функции 'my_login'. –

+0

Спасибо. Тем не менее, я действительно нуждался в запросе и пользователе, как только я изменил имя. точно не знаю, почему это так, но похоже, что работает –

2

Не совсем уверен, что это решит проблему, но там, кажется, проблема здесь:

if request.POST=='POST': 

request.POST - это словарь и никогда не будет оценивать значение True в этом сравнении.

Возможно, попробуйте изменить что:

if request.method == 'POST': 

Это должно, по крайней мере получить Вас в правильный, если/другой части кода.

+0

, который изменил сообщение об ошибке на то, что login() принимает один аргумент и получил два. поэтому я думаю, что это сработало –

+0

nvm. он не работает, я все равно получаю ту же самую ошибку messgae, я удалил запрос от login() –

+0

Нет, вы не должны удалять запрос. В документации говорится, что для этого требуется объект запроса. Смотрите: https://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.login. Какую аутентификацию вы используете? – stephenmuss

Смежные вопросы