добавил просмотр пользователей, обновил алгоритм работы авторизации

This commit is contained in:
2024-01-12 20:33:00 +03:00
parent 7f4bdae4be
commit 09cfcdad0a
9 changed files with 135 additions and 16 deletions

View File

@@ -22,5 +22,6 @@ urlpatterns = [
path('register', views.default_view, name='register'),
path('login', views.view_login, name='login'),
path('logout', views.view_logout, name='logout'),
path('list', views.view_list, name='accounts-list'),
path('change-password', views.default_view, name='change-password'),
]

View File

@@ -4,6 +4,8 @@ from django.http import HttpResponse, HttpResponseRedirect, HttpResponseBadReque
from django.shortcuts import render
# from django.db.models import Manager
from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.decorators import login_required
from .models import User
def default_view(request):
@@ -17,6 +19,15 @@ def view_logout(request):
def view_login(request):
if request.user.is_authenticated:
# уже авторизован, перенаправляем либо в корень, либо по пути, указанному в next
redirect_uri = "/"
if "next" in request.GET:
if request.GET['next'] != request.path:
# чтобы не возникло циклического редиректа
redirect_uri = request.GET['next']
return HttpResponseRedirect(redirect_uri)
render_context = {
'message': None
}
@@ -26,7 +37,12 @@ def view_login(request):
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
return HttpResponseRedirect('/')
redirect_uri = "/"
if "next" in request.GET:
if request.GET['next'] != request.path:
# чтобы не возникло циклического редиректа
redirect_uri = request.GET['next']
return HttpResponseRedirect(redirect_uri)
else:
render_context['message'] = "Неверный логин или пароль"
return render(request, 'account/login.html', render_context)
@@ -36,4 +52,11 @@ def view_login(request):
return HttpResponseBadRequest()
@login_required
def view_list(request):
users = []
# ограничение права на просмотр списка пользователей для непривилегированных пользователей
if request.user.is_superuser:
users = User.objects.order_by('login')
return render(request, 'account/list.html', {'users': users})