Как я могу войти в систему пользователем в Django? У меня есть имя пользователя и пароль пользователя. Есть ли способ, позволяющий мне войти в него?
Как я могу программно аутентифицировать пользователя в Django?
Ответ 1
Нет другого способа, кроме "программно". Конечно, это документально.
from django.contrib.auth import authenticate, login
user = authenticate(username = username, password = password)
if user is not None:
login(request, user)
Ответ 2
Всегда будьте осторожны при программном входе пользователей в систему, вы можете получить ошибку ´ user has no attribute "backend"
. Вы также должны установить бэкэнд, если этого не произошло ранее. Проект, который использует этот и некоторый пример кода:
def splash_register(request):
if request.session.get('beta'):
if request.method=='POST':
userform=MyUserCreationForm(request.POST)
if userform.is_valid():
#username of <30 char is required by Django User model. I'm storing username as a hash of user email
user=userform.save(commit=False)
user.username=hash(user.email)
user.backend='django.contrib.auth.backends.ModelBackend'
user.save()
username=user.username
password=str(userform.cleaned_data['password'])
auth.login(request, user)
request.session['first_visit']=True
return HttpResponseRedirect("/")
else:
userform=MyUserCreationForm(request.POST)
return render_to_response("website/splash_register.html", {'userform':userform}, context_instance=RequestContext(request))
return render_to_response("website/splash_register.html", context_instance=RequestContext(request))
else:
return HttpResponseRedirect('/splash/')
Ответ 3
Принятый ответ определенно работает, но я предпочитаю использовать Django, встроенный в формы авторизации, например, django.contrib.auth.forms.AuthenticationForm
Вот фрагмент, который показывает важную часть
form = AuthenticationForm(request, data=request.POST)
if form.is_valid():
try:
form.clean()
except ValidationError:
# handle error
login(request, form.get_user())
Основным отличием этого подхода является то, что метод AuthenticationForm.clean
вызывает для вас функцию authentication
и также проверяет для вас User.is_active
.