views.py 1.8 KB

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