views.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. """Набор представлений для приложения."""
  2. from django.contrib.auth.mixins import LoginRequiredMixin
  3. from django.urls import reverse_lazy
  4. from django.views import generic
  5. from .forms import NoteForm
  6. from .models import Note
  7. class Home(generic.TemplateView):
  8. """Домашняя страница."""
  9. template_name = 'notes/home.html'
  10. class NoteSuccess(LoginRequiredMixin, generic.TemplateView):
  11. """Страница успешного выполнения операции."""
  12. template_name = 'notes/success.html'
  13. class NoteBase(LoginRequiredMixin):
  14. """Базовый класс для остальных CBV."""
  15. model = Note
  16. template_name: str = ""
  17. success_url = reverse_lazy('notes:success')
  18. def get_queryset(self):
  19. """Пользователь может работать только со своими заметками."""
  20. return self.model.objects.filter(author=self.request.user)
  21. class NoteCreate(NoteBase, generic.CreateView):
  22. """Добавление заметки."""
  23. template_name = 'notes/form.html'
  24. form_class = NoteForm
  25. def form_valid(self, form):
  26. """Проверяет форму на валиднность."""
  27. new_note = form.save(commit=False)
  28. new_note.author = self.request.user
  29. new_note.save()
  30. return super().form_valid(form)
  31. class NoteUpdate(NoteBase, generic.UpdateView):
  32. """Редактирование заметки."""
  33. template_name = 'notes/form.html'
  34. form_class = NoteForm
  35. class NoteDelete(NoteBase, generic.DeleteView):
  36. """Удаление заметки."""
  37. template_name = 'notes/delete.html'
  38. class NotesList(NoteBase, generic.ListView):
  39. """Список всех заметок пользователя."""
  40. template_name = 'notes/list.html'
  41. class NoteDetail(NoteBase, generic.DetailView):
  42. """Заметка подробно."""
  43. template_name = 'notes/detail.html'