🐍🚀 Создаем рекрутинговый портал на Django: часть 2
В этой части: добавление обложек проектов с фронтенда, создание системы авторизации, разработка основной функциональности приложения «Пользователи» и связь проектов с профилями.
Хочешь уверенно проходить IT-интервью?
Мы понимаем, как сложно подготовиться: стресс, алгоритмы, вопросы, от которых
голова идёт кругом. Но с AI тренажёром всё гораздо проще.
💡 Почему Т1 тренажёр — это мастхэв?
Получишь настоящую обратную связь: где затык, что подтянуть и как стать лучше
Научишься не только решать задачи, но и объяснять своё решение так, чтобы
интервьюер сказал: "Вау!".
Освоишь все этапы собеседования, от вопросов по алгоритмам до диалога о твоих
целях.
Зачем листать миллион туториалов? Просто зайди в Т1 тренажёр, потренируйся и
уверенно удиви интервьюеров. Мы не обещаем лёгкой прогулки, но обещаем, что будешь готов!
Реклама. ООО «Смарт Гико», ИНН 7743264341. Erid 2VtzqwP8vqy
Основная часть работы над приложением «Проекты» была выполнена на предыдущем этапе – осталось реализовать добавление изображений. Для этого нужно внести дополнения в модель Projects:
А затем выполнить миграции:
По умолчанию Джанго будет сохранять изображения прямо в корневую директорию проекта, а искать – в папке static. Гораздо удобнее завести для изображений отдельную папку media в корне проекта (а не внутри static). Создайте директорию media, внутри нее папку project_images и поместите в нее файл default.jpg.
Чтобы дать Джанго знать, куда сохранять изображения, сделаем нужные настройки в settings.py:
В файл urls.py добавим импорт:
И маршруты к нужным папкам:
Осталось добавить ссылки на изображения в шаблон projects.html:
И в single-project.html:
Пока что добавлять изображения в карточки проектов можно только в панели администрирования. Чтобы дать пользователям возможность добавлять изображения на стороне фронтенда, сделаем новый шаблон project_form.html:
Кроме того, внесем дополнения в forms.py:
Для сохранения изображений с фронтенда добавим FILES в функции createProject и updateProject:
Создать проект можно по прежней ссылке – http://localhost:8000/create-project/, однако в навигационную панель мы эту ссылку добавлять не станем – позже она будет доступна в профиле пользователя.
Начнем разработку секции «Пользователи» с создания нового приложения:
Как и в случае с projects, приложение нужно зарегистрировать в INSTALLED_APPS (settings.py):
Для вывода профилей нам понадобятся два шаблона – profiles.html и user-profile.html, поместите их в папку users/templates/users.
Теперь создадим нужные функции представления – для вывода всех профилей, просмотра отдельного профиля и фильтрации профилей по скиллам. Сохраните этот код в файле users/views.py:
Создайте файл users/urls.py и сохраните в нем эти маршруты:
Внесите изменения в urlpatterns в главном urls.py в корневой директории проекта itfinder:
Измените ссылку на главную страницу в шаблоне navbar.html – вставьте {% url 'profiles' %}.
И, наконец, сохраните нужные модели в users/models.py:
Теперь создайте и примените миграции:
Запустите сервер – можно создавать профили в админ-панели. На главной странице теперь выводятся профили разработчиков:
Карточки в разделе «Проекты» пока не связаны с их авторами – мы займемся этим на следующем этапе:
Четвертый этап
Для связи проектов с профилями разработчиков добавим импорт модели профиля в projects/models.py – from users.models import Profile и внесем дополнения в модель проекта:
Подготовьте и выполните миграции:
В панели управления выберите разработчиков-авторов для проектов, а в шаблонах projects/projects.html и projects/single-project.html вставьте ссылку на автора:
Запустите сервер и перейдите на страницу «Проекты» – у каждого проекта теперь есть автор, и в профилях разработчиков отображаются их проекты:
Сигналы
Сигналы обеспечивают "прослушивание" действий пользователей и запуск нужных событий: к примеру, сигналы могут триггерить вспомогательные функции, которые нам потребуются в процессе создания, удаления и обновления учетных записей.
Создайте файл users/signals.py и сохраните в нем этот код, а в файл users/apps.py внесите это дополнение:
Теперь можно перейти к созданию всей нужной функциональности для учетных записей.
Регистрация, аутентификация, права доступа
Аутентификация подтверждает личность пользователя, а система авторизации предоставляет (или ограничивает) доступ к определенным функциям и разделам сайта, в зависимости от того зарегистрирован ли пользователь или нет.
Разработку системы аутентификации мы начнем со страницы, которая будет использоваться и для регистрации новых пользователей, и для входа на сайт. В папке users создайте новые шаблоны:
В шаблон navbar.html добавьте ссылки на аккаунт, вход/регистрацию, выход:
Доступ для авторизованных пользователей
Декоратор @login_required(login_url='login') обеспечивает доступ к определенным функциям только для зарегистрированных и авторизованных пользователей. Сохраните эти представления в файле users/views.py:
Помимо функций userAccount, editAccount, createSkill, updateSkill, deleteSkill мы добавим декоратор к функциям в файле views.py в приложении «Проекты» – поскольку добавлять, редактировать и удалять проекты могут только авторизованные пользователи. Функции createSkill, updateSkill, deleteSkill обеспечивают добавление, редактирование и удаление пользователями скиллов в своих профилях:
Удаление скиллов и проектов обрабатывает шаблон delete_template.html – его нужно поместить в папку с глобальными шаблонами templates. Кроме того, создайте новый файл users/forms.py, содержащий нужные формы.
Чтобы включить юзернеймы разработчиков в URL, в шаблонах templates/users мы заменим project.owner.id на project.owner, a маршрут в urls.py на этот:
Если пользователь решит добавить к своему проекту теги, которых еще нет в базе, для них нужно будет сгенерировать слаги. Для этого добавьте импорт в projects/models.py:
И эту функцию в класс Tag:
Весь код и тестовый контент для этого этапа – в репозитории ITfinder.
Комментарии