Как выполнить проверку данных авторизации в 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})
** Убедитесь, что вы настроили функцию в соответствии с вашими потребностями.
Я бы рекомендовал вам ознакомиться с этой документацией для лучшего понимания