bertramvays

bertramvays

Начинающий Django разработчик
Пикабушник
Дата рождения: 18 июля
поставил 0 плюсов и 0 минусов
106 рейтинг 0 подписчиков 0 подписок 1 пост 0 в горячем

Прошу помощи в разьяснении тестового задания на долность 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. я откликался на вакансию Мидла, поэтому вариант задавать все эти вопросы рекрутеру с последующей переадресацией спецам я не рассматривал.

Показать полностью
Отличная работа, все прочитано!