Прошу помощи в разьяснении тестового задания на долность Python-разработчика
Добрый день, уважаемые форумчане.
Несколько дней назад, в поисках ответа на вопрос я попал на страницу с вопросом годичной давности одного пользователя, в которой он искал ментора, потому что сам не мог решить свой вопрос. В коментариях ему посоветовали выложить все задание здесь на pikabu. По причине отзывчивости и доброжелательного отношения пользователей я решил выложить свой вопрос, в надежде получить ответы.
Я рассылаю резюме на вакансию Python-разработчика, и получил тестовое задание. Хотя уже понимаю, что знаний моих не достаточно и нужно еще учиться и скорее всего в эту компанию меня не возьмут, но считаю обязаностью все тестовые задания решать . По причине самостоятельного обучения прошу строго не судить за вопросы, ответы на которые могут показаться очевидные.
И так задание:
Необходимо создать сервер авторизации и новостей с комментариями и лайками на Django с использованием RestFramework на python 3.
У каждого пользователя может быть две роли – пользователь и админ, админ может зайти в админ-панель, пользователь – нет. Как именно решить эту задачу не принципиально. Плюсом будет создание кастомного класса для авторизации наследуемого от BaseAuthentication - нам важно видеть как вы решите эту задачу.
Каждый пользователь может создать новость. Все пользователи могут получать списки всех новостей с пагинацией. Пользователи могут удалять и изменять свои новости. Админ может удалять и изменять любую новость.
Также нужно добавить механизм лайков и комментариев новостей – лайкать и комментировать может любой пользователь, автор может удалять комментарии к своим новостям, админ может удалять любые комментарии.
При получении списка новостей и одной конкретной новости нужно показать количество лайков и комментариев. Плюсом будет добавление списка последних 10 комментариев при получении списка новостей и одной новост.
Плюсом будет реализация механизма через микросервис.
Исходный код приложения необходимо выложить на GitLab или GitHub и запустить сервер. Сервер должен быть доступен для запросов из внешней сети, доступ к серверу (IP или доменное имя) а также роут для доступа к АПИ должны быть в README.md репозитория.
Краткий мануал по созданию виртуального сервера на базе яндекс.облака для новых пользователей даётся бесплатный период использования:
https://cloud.yandex.ru/docs/compute/quickstart/quick-create-linux
Также бесплатный сервер t2 micro можно поднять на Amazone:
https://us-east-2.console.aws.amazon.com/ec2/v2/home
Желательно:
контейнеризация в Docker
использование python venv
использование web сервера CherryPy, gunicorn и им подобных (какого-нибудь одного)
демонстрация понимание механизма миграций моделей (можно сделать несколько изменений в какой-либо модели и показать миграции)
использование .env файла для хранения информации о подключении к базе данных
файл README.md с описанием скриптов для разворачивания окружения и запуска сервера
Модели:
Users (имя пользователя, пароль в зашифрованном виде)
News (дата новости, заголовок новости, текст новости, автор)
Comments (Дата комментария, текст комментария, автор)
Опционально: Tokens (при авторизации можно создавать токены и хранить их в базе или использовать JWT токены)
Роуты
POST auth (передаем имя пользователя и пароль, получаем токен если пользователь с таким паролем есть и ошибку, если такого пользователя нет)
GET news (получаем список новостей с пагинацией)
POST news (создаем новость, проверка на авторизацию)
PUT news (обновляем новость, проерка на атворизацию, проверка на наличие прав)DELETE news
GET comments (получение списка комментариев новости с пагинацией)
POST comments (создание нового комментария, проверка на авторизацию)
DELETE comments
Админка
Нужна стандартная админка Django (пользователи админки могут не пересекаться с пользователями в таблице Users)
Что мне непонятно:
1. Первое на чем я застрал это модель Users. Что мне нужно делать, использовать встроенную модель Django - User или создавать свою? Можно расширить джанговскую или создать прокси модель. Но я не понимаю, как хранить пароль, какой тип поля выбирать для этого? На даном этапе я создал модель News c полем ForeignKey(User).
2. Правильно ли я понял, что для выполнения задания создавать html-шаблон для отображения новостей не нужно? Хотя наверное это будет плюсом.
3. Для реализации механизмов коментариев и лайков в качестве микросервиса, нужно создать его как отдельное Django-приложение, а потом оформить как пакет и выкладывать на отдельном сервере?
4. В начале я пытался в качестве веб-сервера прикрутить CherryPY, но нашел только инструкции 10-летней давности. В итоге запускаю через Gunicorn, для него инструкция в документации Django. После запуска в админке Django, не отображалась статика, поэтому я установил Nginx. Это правильная последовательность действий или нужно было по другому делать?
5. Когда я сделаю проект, Nginx нужно устанавливать в Docker с остальными зависимостями? Создание докер-образа это одна задача, а разворачивание на сервере другая, или можно этот образ развернуть на сервере?
6. Еще читал, что плохая практика пихать в один образ Django-проект и БД, как лучше поступить в моем случае?
Заранее спасибо за ответы.
P.S. я откликался на вакансию Мидла, поэтому вариант задавать все эти вопросы рекрутеру с последующей переадресацией спецам я не рассматривал.