Лучшие практики связанные с Django CBV

Недавно начал изучать Django, и вроде всё для начала понятно. Но при использовании CBV ( наследуюсь от View), у меня возникла трудность, когда я начал делать профиль, который подразумевает многоступенчатость, что я имею в виду:

введите сюда описание изображения

На скриншоте видна главная страница профиля, здесь пользователь может менять аватарку и работать со своими отзывами. Так же есть ещё 2 страницы: личная информация и корзина. Там пользователь может работать с редактированием своих личных данных, и так же имеет возможность менять аватарку. На странице корзины, аналогичная ситуация, он может менять аватарку и работать с корзиной и товарами.

Код выглядит следующим образом: есть 3 CBV и в них всегда обрабатывается один и тот же POST запрос связанный с изменением фото ( на случай если POST заключается в этом) + код, который обрабатывает конкретную функциональность связанную с корзиной, личной информацией или с отзывами.

Сам вопрос заключается вот в чём, как можно было бы избавиться от повторяющегося кода, то есть, чтобы код с POST запросом, который связан с изменением аватарки пользователя писался единожды. Я догадываюсь, что скорее всего можно было бы определить миксин, который бы выполнял работу по обработке запроса связанного с аватаркой, но я побоялся его делать, поскольку не уверен в правильности действия.

Дополнительная информация:

  1. Шаблонов страницы 4, базовый + 3 для трёх пунктов, которые наследуются от базового.
  2. Обновление аватарки происходит без нажатия кнопки, при наведении по аватарке, пользователь может нажать на неё и выбрать нужный ему файл. После того как он сделает выбор, форма автоматически отправится.
  3. Код самих CBV я не оставляю, поскольку они бы заняли очень много текста в сообщении. При надобности прикладываю github проекта: https://github.com/BargerKiller/DjangoShop - view можно найти в приложении users, под названиями: ProfilePageView, ProfilePersonalPageView, ProfileBucketPageView.
  4. Так же я подозреваю, что мой код наполнен плохими практиками по отношению к Django, так, например, корзина реализована, очевидно уродливо и костыльно. Данные трудности я постараюсь исправить уже в следующем проекте, когда увеличу базу знаний.
Вернуться на верх