2009-07-15 7 views
83

Ich versuche, die ID des Benutzers in der Sitzung mit django.contrib.auth.login zu speichern. Aber es funktioniert nicht wie erwartet.Django "Login() dauert genau 1 Argument (2 gegeben)" Fehler

Ich erhalte Fehler login() nimmt genau 1 Argument (2 angegeben)

Mit Login (Benutzer) Ich bin immer Attribute bei/login/User‘Objekt hat kein Attribut 'Methode'

ich verwende etwas modifyed Beispiel Form 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}) 

gibt es nichts besonderes über login.html:

Hat jemand eine Idee, wie man login() arbeiten kann.

+3

funktioniert, wenn Sie Ihre Ansicht umbenennen – Evgeny

+0

Nur die Frage und Antwort, die ich suchte. Einer von mehreren Fehlern, die ich gemacht habe, als ich versuchte Logins im Django zu starten, zusammen mit Contexts vs RequestContexts und ohne csrf_tokens. – chucksmash

+0

Hier finden Sie ein Tutorial über Django-Benutzer http://lowcoupling.com/post/71289666862/django-the-user-tutorial Es gibt auch ein GitHub-Projekt, das Sie klonen und überprüfen können – lowcoupling

Antwort

230

Ihre Ansicht Funktion wird auch login, und der Anruf an login(request, user) endet als als Versuch interpretiert genannt rekursiv diese Funktion aufzurufen:

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

es Ihrer Ansicht nach Funktion Um zu vermeiden, umbenennen oder in die login beziehen aus django.contrib.auth auf eine andere Weise. Sie könnten zum Beispiel den Import ändern, um die Login-Funktion umbenennen:

from django.contrib.auth import login as auth_login 

... 
auth_login(request, user) 
+0

Wow, ich habe den Quellcode von Django durchsucht und versuchte jede ältere Version zu testen und dachte, ich würde verrückt werden – Mojimi

15

Eine mögliche Lösung:

from django.contrib import auth 

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

Jetzt ist Ihre Ansicht Namen überschreiben Name django Sicht nicht.

9

Ein anderer Weg:

from django.contrib.auth import login as auth_login 

dann auth_login(request, user) rufen statt login(request, user).

Verwandte Themen