Django authenticate: использование в login vs. register (signup): чем они отличаются?
Я заметил, что Django authenticate используется одинаково и в представлении login, и в представлении register, оба возвращают объект User, который будет использоваться в login().
В представлении входа authenticate() используется имя пользователя и пароль из отправленной формы, затем на user проверяется, в порядке ли учетные данные.
if request.method == 'POST':
username = request.POST['username']
password = request.POST['password1']
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
Представление register выглядит очень похоже на представление login. Оно получает учетные данные из отправленной формы и использует user для входа.
if request.method == "POST":
form = UserCreationForm(request.POST)
if form.is_valid():
form.save()
username = form.cleaned_data['username']
password = form.cleaned_data['password1']
user = authenticate(request, username=username, password=password)
login(request, user)
Оба вызывают user = authenticate(request, username=username, password=password).
Кроме сохранения формы в представлении регистрации, в чем здесь разница? Потому что логин (я полагаю) только проверяет, что учетные данные действительны, но регистр создает нового пользователя, и, поскольку он создает, учетные данные являются новыми данными, поступающими в систему. Я правильно понимаю?
Вам не нужно аутентифицировать пользователя в вашем методе регистрации. Это может быть просто,
form = CreateUserForm()
if request.method == 'POST':
form = CreateUserForm(request.POST)
if form.is_valid():
form.save()
return redirect('<urlname>')
context = {'form': form}
return render(request, '<appname>/<filename>.html', context)
Следовательно, аутентификация требуется только при входе в систему в качестве пользователя. И вы можете еще больше упростить метод входа в систему, сделав следующее,
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
user = authenticate(request, username=username, password=password)
if user:
login(request, user)
return redirect('<urlname>')
return render(request, '<appname>/<filename>.html')
Надеюсь, это прояснит для вас ситуацию :)