/
Messus
/
Micula
Обзор
Документация
Войти
/
Messus
/
Micula
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
main/views.py
143 строки
5 KB
Messus
add images
19 дек 2025, 08:11
19 дек 2025, 08:11
31bff10
Код
Авторство
О чём код?
from django.shortcuts import render from django.http import HttpResponse, Http404 from django.template import TemplateDoesNotExist from django.template.loader import get_template from django.contrib.auth.views import LoginView from django.contrib.auth.decorators import login_required from django.contrib.auth.views import LogoutView from django.views.generic.edit import UpdateView from django.contrib.messages.views import SuccessMessageMixin from django.contrib.auth.mixins import LoginRequiredMixin from django.urls import reverse_lazy from django.shortcuts import get_object_or_404 from django.contrib.auth.views import PasswordChangeView from django.views.generic.edit import CreateView from django.views.generic.base import TemplateView from django.views.generic.edit import DeleteView from django.contrib.auth import logout from django.core.signing import BadSignature from django.core.paginator import Paginator from django.db.models import Q from .models import AdvUser from .forms import ProfileEditForm from .forms import RegisterForm from .utilities import signer from .models import SubRubric, Bb from .forms import SearchForm # Create your views here. def index(request): return render(request, 'main/index.html') def other_page(request, page): try: template = get_template('main/' + page + '.html') except TemplateDoesNotExist: raise Http404 return HttpResponse(template.render(request=request)) def user_activate(request, sign): try: username = signer.unsign(sign) except BadSignature: return render(request, 'main/activation_failed.html') user = get_object_or_404(AdvUser, username=username) if user.is_activated: template = 'main/activation_done_earlier.html' else: template = 'main/activation_done.html' user.is_active = True user.is_activated = True user.save() return render(request, template) class BBLoginView(LoginView): template_name = 'main/login.html' class BBLogoutView(LogoutView): pass class ProfileEditView(SuccessMessageMixin, LoginRequiredMixin, UpdateView): model = AdvUser template_name = 'main/profile_edit.html' form_class = ProfileEditForm success_url = reverse_lazy('main:profile') success_message = 'Данны пользователя изменены' def setup(self, request, *args, **kwargs): self.user_id = request.user.pk return super().setup(request, *args, **kwargs) def get_object(self, queryset=None): if not queryset: queryset = self.get_queryset() return get_object_or_404(queryset, pk=self.user_id) class ProfileDeleteView(SuccessMessageMixin, LoginRequiredMixin, DeleteView): model = AdvUser template_name = 'main/profile_delete.html' success_url = reverse_lazy('main:index') success_message = 'Пользователь удален' def setup(self, request, *args, **kwargs): self.user_id = request.user.pk return super().setup(request, *args, **kwargs) def post(self, request, *args, **kwargs): logout(request) return super().post(request, *args, **kwargs) def get_object(self, queryset=None): if not queryset: queryset = self.get_queryset() return get_object_or_404(queryset, pk=self.user_id) class PasswordEditView(SuccessMessageMixin, LoginRequiredMixin, PasswordChangeView): template_name = 'main/password_edit.html' success_url = reverse_lazy('main:profile') success_message = 'пароль пользователя изменен' class RegisterView(CreateView): model = AdvUser template_name = 'main/register.html' form_class = RegisterForm success_url = reverse_lazy('main:register_done') class RegisterDoneView(TemplateView): template_name = 'main/register_done.html' def rubric_bbs(request, pk): rubric = get_object_or_404(SubRubric, pk=pk) bbs = Bb.objects.filter(is_active=True, rubric=pk) if 'keyword' in request.GET: keyword = request.GET['keyword'] q = Q(title__icontains=keyword) | Q(content__icontains=keyword) bbs = bbs.filter(q) else: keyword = '' form = SearchForm(initial={'keyword': keyword}) paginator = Paginator(bbs, 2) if 'page' in request.GET: page_num = request.GET['page'] else: page_num = 1 page = paginator.get_page(page_num) context = {'rubric': rubric, 'page': page, 'bbs': page.object_list, 'form': form} return render(request, 'main/rubric_bbs.html', context) def bb_detail(request, rubric_pk, pk): bb = get_object_or_404(Bb, pk=pk) ais = bb.additionalimage_set.all() context = {'bb': bb, 'ais': ais} return render(request, 'main/bb_detail.html', context) @login_required def profile(request): return render(request, 'main/profile.html')