django.contrib.auth.login을 사용하여 세션에 사용자 ID를 저장하려고합니다. 그러나 예상대로 작동하지 않습니다.
오류가 발생합니다. login ()은 정확히 1 개의 인수 (2 개)를받습니다.
login (user)을 사용하면 / login / User에서 AttributeError가 발생합니다. 객체에 ‘method’속성이 없습니다.
약간 수정 된 예제 양식 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: <input type="text" name="u">
<br/>
Password: <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>
아무도 login () 작동하는 방법을 알고 있습니까?
답변
뷰 함수는라고도하며 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)
답변
한 가지 가능한 수정 :
from django.contrib import auth
def login(request):
# ....
auth.login(request, user)
# ...
이제 뷰 이름이 django의 뷰 이름을 덮어 쓰지 않습니다.
답변
또 다른 방법:
from django.contrib.auth import login as auth_login
그런 다음 auth_login(request, user)
대신 login(request, user)
.