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')

Надеюсь, это прояснит для вас ситуацию :)

Вернуться на верх