2009-07-15 142 views
83

我試圖使用django.contrib.auth.login將用戶的ID存儲在會話中。但它沒有按預期工作。Django「login()只需要1個參數(給出2)」error

我發現了錯誤登錄()恰恰1個參數(2給出)

隨着登錄信息(用戶)我得到AttributeError的在/登錄/用戶」對象沒有屬性‘方法’

我用稍微modifyed例如形式http://docs.djangoproject.com/en/dev/topics/auth/

from django.shortcuts import render_to_response 
from django.contrib.auth import authenticate, login 

def login(request): 
    msg = [] 
    if request.method == 'POST': 
     username = request.POST['u'] 
     password = request.POST['p'] 
     user = authenticate(username=username, password=password) 
     if user is not None: 
      if user.is_active: 
       login(request, user) 
       msg.append("login successful") 
      else: 
       msg.append("disabled account") 
     else: 
      msg.append("invalid login") 
    return render_to_response('login.html', {'errors': msg}) 

沒有什麼特別之處的login.html:

<html> 
<head> 
    <title></title> 
</head> 
<body> 
    <form action="/login/" method="post"> 
     Login:&nbsp; <input type="text" name="u"> 
    <br/> 
     Password:&nbsp; <input type="password" name="p"> 
     <input type="submit" value="Login"> 
    </form> 
    {% if errors %} 
     <ul> 
      {% for error in errors %} 
      <li>{{ error }}</li> 
      {% endfor %} 
     </ul> 
    {% endif %} 

</body> 
</html> 

有沒有人有想法如何使登錄()的工作。

+3

將工作,如果你重新命名你的觀點 – Evgeny 2009-07-15 22:36:14

+0

只是我正在尋找的問題和答案。嘗試在django中註冊並運行時發生的幾個錯誤之一,以及使用Contexts vs RequestContexts和忽略csrf_tokens。 – chucksmash 2012-09-03 15:32:12

回答

230

您的視圖功能也被稱爲login,並調用login(request, user)最終被解釋爲企圖調用這個函數遞歸:

def login(request): 
    ... 
    login(request, user) 

爲了避免將其重命名您的視圖功能或參考logindjango.contrib.auth以某種不同的方式。例如,您可以更改導入重命名登錄功能:

from django.contrib.auth import login as auth_login 

... 
auth_login(request, user) 
15

一個可能的解決辦法:

from django.contrib import auth 

def login(request): 
    # .... 
    auth.login(request, user) 
    # ... 

現在您的視圖名稱不會覆蓋Django的視圖名稱。

9

另一種方式:

from django.contrib.auth import login as auth_login 

然後調用auth_login(request, user),而不是login(request, user)

相關問題