Функция на 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
- Аутентификация пользователей: Используйте функцию authenticate() для проверки набора учетных данных (имя пользователя, пароль).
user = authenticate(username="john", password="secret")
if user is not None:
# A backend authenticated the credentials
...
else:
# No backend authenticated the credentials
...
- Аутентификация в веб-запросах
def my_view(request):
if request.user.is_authenticated:
# Redirect to a success page.
...
else:
# Redirect to a login page...
- войти в систему пользователя:
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.
...
- пример
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})