Функция на Django для проверки пользователя в базе данных

Я хочу написать функцию для проверки пользователя в базе данных, может ли кто-нибудь помочь? Кто-нибудь может помочь, я изучаю Django. Я пробовал много способов, но ... ------------view.py----------------

def user_enter(request):
     print("hello")
     if request.method == "POST":
        enter_user_email=request.POST.get('enter_user_email')
        enter_user_pass=request.POST.get('enter_user_pass')
        print(enter_user_pass)
        print(enter_user_email)
        data=User.objects.filter(email_name = enter_user_email,user_password = enter_user_pass).exists()
     return render(request, 'main.html',{'data':data})

--------------HTML---------------

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.3.1/dist/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
    <link rel="stylesheet" href="static/css/style.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
</head>
<body>
<div class="container mx-auto mt-2" style="width: 500px;" id="input_name_pass">
  <img src="static/user.png" alt="..."  id='user_image' class="img-thumbnail mx-auto" style="width: 200px;">
 <form action="" method = "POST">
        {% csrf_token %}
        <div class="input-group input-group-sm mb-3 mt-4">
        <div class="input-group-prepend">
            <span class="input-group-text" id="inputGroup-sizing-sm">User</span>
        </div>
        <input type="text" class="form-control" aria-label="Small" aria-describedby="inputGroup-sizing-sm" name = "enter_user_email">
        </div>

        <div class="input-group input-group-sm mb-3">
            <div class="input-group-prepend">
            <span class="input-group-text" id="inputGroup-sizing-sl">Pass</span>
        </div>
        <input type="password" class="form-control" aria-label="Small" aria-describedby="inputGroup-sizing-sm" name = "enter_user_pass">
        </div>

  <button type="submit"  class="btn btn-primary mt-3" onclick="location.href='{% url 'user_enter' %}'">Enter</button>

</form>
      <button type="button"  class="btn btn-primary mt-3" onclick="location.href='{% url 'user_registration' %}'">Create User</button>
</div>
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.14.7/dist/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.3.1/dist/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
</body>
</html>

При использовании Django лучшим способом проверить наличие пользователя в базе данных является встроенная функция authenticate. Она автоматически берет на себя обработку паролей и является лучшим способом вместо того, чтобы вручную писать функцию, которая фильтрует пользователей непосредственно по имени пользователя и паролю.

Так что вы можете использовать эту authenticate вместе с login из django.contrib.auth для входа пользователя в систему, если все в порядке.

Вот как вы можете справиться с этим сценарием:

from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login

def user_enter(request):
    if request.method == "POST":
        enter_user_email = request.POST.get('enter_user_email')
        enter_user_pass = request.POST.get('enter_user_pass')
        
        # Authenticate the user
        user = authenticate(request, username=enter_user_email, password=enter_user_pass)
        
        if user is not None:
            # The authentication was successful, log the user in
            login(request, user)
            # Redirect to a success page.
            return redirect('redirect_the_user_here_in_case_of_success')
        else:
            # Authentication failed
            data = False
    else:
        data = None

    return render(request, 'your_html_file.html', {'data': data})
def loginpage(request):
   if request.method == "POST":
       username = request.POST.get('username')
       password = request.POST.get('password')
       user = authenticate(request, username=username, password=password)
       if user is UserAuthentication: #UserAuthentication is my model where data is stored
           login(request, user)
           return redirect('index')
       else:
           messages.warning(request, "Username OR Password is incorrect!")
           return redirect('login')
   else:
       return render(request, "HTML/login.html", context={})

Django различные способы аутентификации пользователя

# import 
from django.contrib.auth import authenticate, login, logout
  1. Аутентификация пользователей: Используйте функцию authenticate() для проверки набора учетных данных (имя пользователя, пароль).
user = authenticate(username="john", password="secret")
if user is not None:
    # A backend authenticated the credentials
    ...
else:
    # No backend authenticated the credentials
    ...
  1. Аутентификация в веб-запросах
def my_view(request):        
    if request.user.is_authenticated:
        # Redirect to a success page.
        ...
    else:
        # Redirect to a login page...
  1. войти в систему пользователя:
def my_view(request):        
    username = request.POST["username"]
    password = request.POST["password"]
    user = authenticate(request, username=username, password=password)
    if user is not None:
        login(request, user)
        # set session expire
        request.session.set_expiry(21600)
        # Redirect to a success page.
        ...
    else:
        # Return an 'invalid login' error message.
        ...
  1. пример
    from django.contrib.auth import authenticate, login, logout
    
    def user_login(request):
        msg = ''

        # Authentication in web requests
        if request.method == "GET":
            if request.user.is_authenticated:
                return redirect('admin-profile')
            return render(request, template_name='login_page.html')

        # Authenticate the user
        if request.method == "POST":
            data = request.POST
            result = login_validator(data)
            if result is True:
                user = authenticate(username=data.get(
                    'username'), password=data.get('pswd'))
                if user is not None and user.is_active:
                    login(request, user=user)
                    request.session.set_expiry(21600)
                    return redirect('admin-profile')

                    # ignore if no need of email verification
                    # in this case user is created but not active 
                    # for activation you need email verification from user side 
                    # for that send verification email with hyperlink during Sign In process on user provided email id 
                else:    
                    UserModel = get_user_model()
                    user_inactive = UserModel.objects.exclude(is_active=True).filter(
                        Q(username__iexact=data.get('username'))).first()
                    if str(user_inactive) == data.get('username'):
                        msg = 'please chack ur email box, to activate your account'
                        return render(request, 'error.html', context={'message': msg})
            else:
                msg = 'Invalid Credential Check For Username And Password'
        return render(request, template_name='login_page.html', context={'message': msg})
Вернуться на верх