Как выполнить проверку данных авторизации в Django?

Итак, я написал код для страницы reg.html. Если регистрационные данные заполнены правильно, то форма сохраняется и создается аккаунт. Я все проверил, данные в базу занесены. Осталось сделать авторизацию. Но вот вопрос - как сделать проверку на правильность данных? Проще говоря, если пользователь авторизуется и такой аккаунт действительно существует, то он должен быть перенаправлен на главную страницу. В противном случае на сайте появится сообщение "Такой учетной записи не существует". Вот код ниже.

views.py:

from django.shortcuts import render, redirect
from django.http import HttpResponse
from .form import SignUpForm, RegisterForm
from .models import Registration

def index(request):
    return render(request, 'main/index.html',)

def about(request):
    return render(request, 'main/about.html')

def register(request):
    if request.method == 'POST':
        form = RegisterForm(request.POST)
        if form.is_valid():
            form.save(commit=False)
            return redirect('log')
    form = RegisterForm()
    return render(request, 'main/reg.html', {
        'form': form
    })

def log(request):
    if request.method == "POST":
        form = SignUpForm(request.POST)
        if form.is_valid(): 
            if Registration().objects.filter().exists():
                return HttpResponse('Да')
            else:
                return HttpResponse('Нет')
                
    form = SignUpForm()
    return render(request, 'main/log.html', {
        'form': form
    })

Чтобы реализовать authorization проверку в Django, вам нужно authenticate пользователя, используя учетные данные, указанные в форме входа.

Django предоставляет встроенную систему authentication, которая упрощает этот процесс. Как я вижу, в вашей текущей реализации вы используете пользовательскую модель Регистрация для пользовательских данных, которая может быть не интегрирована с системой аутентификации Django.

В большинстве случаев для работы с учетными записями пользователей следует использовать модель Django User. Эта модель предназначена для работы с фреймворком Django по умолчанию authentication. Если ваша модель регистрации заменяет модель User, очень важно убедиться, что она правильно настроена для аутентификации, что может быть действительно сложной задачей ( Я предполагаю, что вы не делаете этого).

Вы можете попробовать сделать это в своем файле views.py, изменив уже определенный метод log.

views.py:

#Import Django Authentication Functions: Import Django's authenticate and login functions.
from django.contrib.auth import authenticate, login
from django.shortcuts import render, redirect
from .form import SignUpForm

def log(request):
    if request.method == "POST":
        form = SignUpForm(request.POST)
        if form.is_valid():
            username = form.cleaned_data.get('username')
            password = form.cleaned_data.get('password')
            user = authenticate(request, username=username, password=password)
            if user is not None:
                login(request, user)
                return redirect('home') #make sure to change this as per your need
            else:
                return HttpResponse('No such account')

    else:
        form = SignUpForm()
    return render(request, 'main/log.html', {'form': form})

** Убедитесь, что вы настроили функцию в соответствии с вашими потребностями.

Я бы рекомендовал вам ознакомиться с этой документацией для лучшего понимания

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