import os from django.contrib.auth.forms import PasswordChangeForm from django.http import HttpResponse, HttpResponseRedirect, HttpResponseBadRequest, Http404 from django.shortcuts import render # from django.db.models import Manager from django.contrib.auth import authenticate, login, logout, update_session_auth_hash from django.contrib.auth.decorators import login_required, permission_required from .models import User from .forms import UserRegisterForm def default_view(request, *args, **kwargs): return HttpResponse('Not implemented!') def view_logout(request): logout(request) # перенаправляем на страницу авторизации return HttpResponseRedirect('/account/login') 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 } if request.method == "POST": username = request.POST["username"] password = request.POST["password"] user = authenticate(request, username=username, password=password) if user is not None: login(request, user) 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) elif request.method == "GET": return render(request, 'account/login.html', render_context) else: return HttpResponseBadRequest() @login_required def view_account(request, username=None): view_user = request.user if username is not None: if username != view_user.login: if request.user.has_perm('users.view_user'): try: view_user = User.objects.get_by_natural_key(username) except: return Http404() else: raise PermissionError() return render(request, 'account/view.html', {'view_user': view_user}) @login_required @permission_required(perm='users.add_user', raise_exception=True) def view_register(request): form = UserRegisterForm(request.POST or None) if request.method == 'POST': if form.is_valid(): form.save() return HttpResponseRedirect('/account/list') return render(request, 'account/register.html', {'form': form}) @login_required def view_change_password(request): user = request.user if 'username' in request.GET: if request.user.has_perm('users.change_user'): try: user = User.objects.get_by_natural_key(request.GET['username']) except: return Http404() else: raise PermissionError() form = PasswordChangeForm(user=user, data=(request.POST or None)) if request.method == "POST": if form.is_valid(): form.save() update_session_auth_hash(request, form.user) return HttpResponseRedirect('account') return render(request, 'account/change-password.html', {'form': form, 'target_user': user}) @login_required @permission_required(perm='users.view_user', raise_exception=True) def view_list(request): return render(request, 'account/list.html', {'users': User.objects.order_by('login')})