/
progart116
/
PlanerProject2026
Обзор
Документация
Войти
/
progart116
/
PlanerProject2026
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Apps/UserLogApp/views.py
218 строк
12 KB
progart116
debug
25 апр 2026, 12:27
25 апр 2026, 12:27
4a037dd
Код
Авторство
О чём код?
from django.shortcuts import render import django.http import django.urls import django.views.decorators.http import Apps.UserLogApp.models import django.contrib.auth import Apps.UserLogApp.forms import django.contrib.auth.models import datetime import django.contrib.auth.decorators @django.contrib.auth.decorators.login_required def profile(request, error_message="", success_message=""): try: current_user = Apps.UserLogApp.models.User.objects.get(django_user__username=str(request.user)) context = { "user": current_user, "error_message": error_message, "success_message": success_message, } Apps.UserLogApp.models.Log.objects.create(source_ip=request.META.get('HTTP_X_FORWARDED_FOR', 'unknown'), application="UserLogApp", method="views.profile", log_data="Открыта страница профиля", user=current_user) return render(request, "UserLogApp/profile.html", context) except Exception as ex: Apps.UserLogApp.models.Log.objects.create(source_ip=request.META.get('HTTP_X_FORWARDED_FOR', 'unknown'), application="UserLogApp", method="views.profile", log_data=f"Ошибка открытия страницы профиля: {str(ex)}", user=current_user) return render(request, "Common/500.html", { "error": str(ex) }, status=500) def login(request, error_message=""): try: if request.user.is_authenticated: return django.http.HttpResponseRedirect(django.urls.reverse("UserLogApp:profile")) context = { "decorator_redirect": request.GET.get("next", request.POST.get("decorator_redirect", django.urls.reverse("main_page"))), "error_message": error_message, } Apps.UserLogApp.models.Log.objects.create(source_ip=request.META.get('HTTP_X_FORWARDED_FOR', 'unknown'), application="UserLogApp", method="views.login", log_data="Открыта страница аутентификации", user=None) return render(request, "UserLogApp/login.html", context) except Exception as ex: return render(request, "Common/500.html", { "error": str(ex) }, status=500) @django.views.decorators.http.require_http_methods(["POST"]) def login_post(request): current_user = None try: if request.user.is_authenticated: django.contrib.auth.logout(request) user_login = request.POST["login"] user_password = request.POST["password"] if not django.contrib.auth.models.User.objects.filter(username=user_login).exists(): raise Exception("Пользователь не существует") if not Apps.UserLogApp.models.User.objects.filter(django_user__username=user_login).exists(): raise Exception("Пользователь не найден") current_user = Apps.UserLogApp.models.User.objects.get(django_user__username=user_login) if not current_user.active: raise Exception("Пользователь заблокирован") authenticate_user = django.contrib.auth.authenticate(request, username=user_login, password=user_password) if authenticate_user: django.contrib.auth.login(request, authenticate_user) Apps.UserLogApp.models.Log.objects.create(source_ip=request.META.get('HTTP_X_FORWARDED_FOR', 'unknown'), application="UserLogApp", method="views.login_post", log_data=f"Выполнен вход под логином {user_login}", user=current_user) return django.http.HttpResponseRedirect(request.POST['decorator_redirect']) else: raise Exception("Неверный пароль") except Exception as ex: Apps.UserLogApp.models.Log.objects.create(source_ip=request.META.get('HTTP_X_FORWARDED_FOR', 'unknown'), application="UserLogApp", method="views.login_post", log_data=f"Ошибка входа: {str(ex)}", user=current_user) return login(request, str(ex)) def logout(request): user = None if request.user.is_authenticated: user = Apps.UserLogApp.models.User.objects.get(django_user__username=str(request.user)) django.contrib.auth.logout(request) Apps.UserLogApp.models.Log.objects.create(source_ip=request.META.get('HTTP_X_FORWARDED_FOR', 'unknown'), application="UserLogApp", method="views.logout", log_data="Выполнен выход из системы", user=user) return django.http.HttpResponseRedirect(django.urls.reverse("UserLogApp:login")) def register(request, error_message=""): try: if request.user.is_authenticated: django.contrib.auth.logout(request) context = { "form": Apps.UserLogApp.forms.RegisterForm(), "error_message": error_message, } Apps.UserLogApp.models.Log.objects.create(source_ip=request.META.get('HTTP_X_FORWARDED_FOR', 'unknown'), application="UserLogApp", method="views.register", log_data="Открыта страница регистрации", user=None) return render(request, "UserLogApp/register.html", context) except Exception as ex: return render(request, "Common/500.html", { "error": str(ex) }, status=500) @django.views.decorators.http.require_http_methods(["POST"]) def register_post(request): try: last_time_register = Apps.UserLogApp.models.User.objects.order_by("register_time").last().register_time total_seconds = (datetime.datetime.now(tz=datetime.UTC) - last_time_register).total_seconds() if total_seconds < 300: raise Exception(f"После последней регистрации прошло менее 5 минут. Повторите попытку через {round(300 - total_seconds)} секунд.") form = Apps.UserLogApp.forms.RegisterForm(request.POST) if not form.is_valid(): raise Exception(f"Заполнены некорректные данные в форме добавления: {str(form.errors)}") login = form.cleaned_data["login"] password = form.cleaned_data["password"] django_user = django.contrib.auth.models.User.objects.create_user(username=login, password=password) user = Apps.UserLogApp.models.User() user.surname = form.cleaned_data["surname"] user.firstname = form.cleaned_data["firstname"] user.secondname = form.cleaned_data["secondname"] user.phone = form.cleaned_data["phone"] user.email = form.cleaned_data["email"] user.active = True user.django_user = django_user user.save() Apps.UserLogApp.models.Log.objects.create(source_ip=request.META.get('HTTP_X_FORWARDED_FOR', 'unknown'), application="UserLogApp", method="views.register_post", log_data=f"Зарегистрирован новый пользователь: {login}", user=None) return django.http.HttpResponseRedirect(django.urls.reverse("UserLogApp:login")) except Exception as ex: Apps.UserLogApp.models.Log.objects.create(source_ip=request.META.get('HTTP_X_FORWARDED_FOR', 'unknown'), application="UserLogApp", method="views.register_post", log_data=f"Ошибка регистрации: {str(ex)}", user=None) return register(request, f"Ошибка: {str(ex)}") @django.contrib.auth.decorators.login_required @django.views.decorators.http.require_http_methods(["POST"]) def change_data(request): try: login = str(request.POST["login"]) if login != str(request.user): raise Exception("Несоответствие логинов в запросе и в форме") user = Apps.UserLogApp.models.User.objects.get(django_user__username=login) user.surname = request.POST["surname"] user.firstname = request.POST["firstname"] user.secondname = request.POST["secondname"] user.phone = request.POST["phone"] user.email = request.POST["email"] user.save() Apps.UserLogApp.models.Log.objects.create(source_ip=request.META.get('HTTP_X_FORWARDED_FOR', 'unknown'), application="UserLogApp", method="views.change_data", log_data=f"Пользователь {user.django_user.username} изменил свои данные", user=user) return profile(request, error_message="", success_message="Изменения успешно внесены!") except Exception as ex: Apps.UserLogApp.models.Log.objects.create(source_ip=request.META.get('HTTP_X_FORWARDED_FOR', 'unknown'), application="UserLogApp", method="views.change_data", log_data=f"Ошибка изменения данных: {str(ex)}", user=user) return profile(request, error_message=f"Ошибка: {str(ex)}", success_message="") @django.contrib.auth.decorators.login_required @django.views.decorators.http.require_http_methods(["POST"]) def change_password(request): try: current_user = Apps.UserLogApp.models.User.objects.get(django_user__username=str(request.user)) old_password = request.POST["old_password"] new_password = request.POST["new_password"] confirm_password = request.POST["confirm_password"] if not django.contrib.auth.models.User.check_password(current_user.django_user, old_password): raise Exception("Неверный старый пароль") if str(new_password) != str(confirm_password): raise Exception("Новые пароли не совпадают") current_user.django_user.set_password(str(new_password)) current_user.django_user.save() return profile(request, error_message="", success_message="Пароль успешно изменен") except Exception as ex: Apps.UserLogApp.models.Log.objects.create(source_ip=request.META.get('HTTP_X_FORWARDED_FOR', 'unknown'), application="UserLogApp", method="views.change_data", log_data=f"Ошибка изменения пароля: {str(ex)}", user=current_user) return profile(request, error_message=f"Ошибка: {str(ex)}", success_message="")