2009-07-15 10 views
83

मैं django.contrib.auth.login का उपयोग कर सत्र में उपयोगकर्ता की आईडी को स्टोर करने का प्रयास कर रहा हूं। लेकिन यह उम्मीद के अनुसार काम नहीं कर रहा है।Django "लॉगिन() वास्तव में 1 तर्क (2 दिया गया) लेता है" त्रुटि

मैं विधि '' कोई भी विशेषता है वस्तु 'लेता हो रही त्रुटि लॉगिन() वास्तव में 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

+0

बस सवाल और उत्तर मैं देख रहा था। कॉन्टेक्स बनाम अनुरोध कॉन्टैक्स का उपयोग करके और csrf_tokens को छोड़कर, लॉग इन करने और django में चलने की कोशिश करते समय मैं कई गलतियों में से एक बना रहा था। – chucksmash

+0

यहां आप Django उपयोगकर्ताओं के बारे में एक ट्यूटोरियल पा सकते हैं http://lowcoupling.com/post/71289666862/django-the-user-tutorial एक गिटहब प्रोजेक्ट भी है जिसे आप क्लोन कर सकते हैं और – lowcoupling

उत्तर

230

आपका दृश्य समारोह भी login कहा जाता है, और login(request, user) करने के लिए कॉल इस समारोह रिकर्सिवली कॉल करने के लिए एक प्रयास के रूप में व्याख्या की जा रही समाप्त होता है:

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

यह आपके विचार समारोह का नाम बदलें या से login का उल्लेख से बचने के लिए django.contrib.auth कुछ अलग तरीके से। उदाहरण के लिए आप लॉगिन समारोह का नाम बदलने के आयात को बदल सकता है:

from django.contrib.auth import login as auth_login 

... 
auth_login(request, user) 
+0

वाह देख सकते हैं, मैं Django के स्रोत कोड के माध्यम से ब्राउज़ कर रहा था , और उपलब्ध हर पुराने संस्करण की कोशिश कर रहा है, सोच रहा था कि मैं पागल हो रहा था – Mojimi

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) कहते हैं।

संबंधित मुद्दे