Сегодня очень многие backend разработчики стали писать именно rest api.

Почему же так?

Схемка
Схемка

Ответ тут у каждого свой. Но мне например нравится больше писать rest api, так как rest более гибкий и позволяет приложениям обмениваться данными в нескольких форматах. Поэтому я бы хотел поделиться как начать писать backend на Django Rest Framework (DRF).

Итак, с чего же начать? Начнем пожалуй с того, что определимся с тем, что же мы будем делать. Предлагаю сделать backend для сайта с ... Даже не знаю какую идею выбрать (Да, знаю. Так и хочется сказать, что зачем что-то придумывать, ты же пишешь backend, все равно здесь можно как-то абстрактно называть модели и потом придумать уже фронт под него, но я хочу в будущем еще и frontend написать, а потому идею надо придумать). Сделать новостной сайт, ну это слишком скучно. О придумал, так уж и быть, пусть сайт будет немного скучный - это будет что-то типа соц. сети. Но в ней мы реализуем много чего прикольного.

Чего же я именно хочу:

  • Авторизация и Регистрация - ну так естессна :-)

  • Профиль с настройками и всем, всем, всем необходимым - ну вроде очевидно :-)

  • Постики (обязательно с фоточками, видосиками и gif-ками - как же без них)

  • Опросники и голосовалки - нуууу а почему бы и нет)

  • Чатики - даааа, это было бы интересно

  • Возможность оплачивать какие-то платные вещи - посты там, подписки ну и может прикрутим какой-нибудь маркет

  • Видеочатик - тоже что-то прикольное, надо бы попробовать

    Нуууууу... Думаю пока что хватит. Вот такое у нас чудовище Франкенштейна получится.)))

чудовище Франкенштейна
чудовище Франкенштейна

Если думаешь, что это как-то сложно для туториала?

Ну возможно так и есть, однако я буду стараться максимально подробно останавливаться на всех моментах разработки и подробно рассказывать что и как я делаю. И да, я буду рассказывать все по нарастанию сложности (ну по крайней мере я буду стараться так делать) Но как бы я писал тут, как бы ты не читал или не смотрел какие-нибудь видео уроки, запомни (!!!): если сам не будешь прогать, то и смысла читать особого нет. Увы, но это так. (НУ И ТУТ ДОЛЖЕН РАССКАЗАТЬ ПОЧЕМУ ТАК, НО МНЕ ЛЕНЬ) В общем поверь в то, что это так и все)))

Глава 1. Postgres

Увы, но без настроек никак не обойтись. Для начала обращаю внимание, а именно, я буду использовать операционную систему(ОС) Linux, поэтому если у вас Windows, то либо учите или спрашивайте у GPT как мои команды пишутся в Windows PowerShell, либо качайте WSL.

Итак, для начала обновим все пакеты Linux. sudo apt update - в студию:

$ sudo apt update

Ну круто, теперь определимся с базой данных.

Чавось? Зачем?

Ну вот так вот. Прикинь ты имеешь много постиков с видосиками и ты решил выложить свой сайт в сеть. Как левые челы смогут понять, что постики есть и увидеть их? Так вот их нужно где-то хранить и для этого мы используем базу данных (БД).

Предлагаю не тянуть кота за ... хвост и просто возьмем Postgres (https://www.postgresql.org/)

Postgres
Postgres

Почему именно ее?

Ну я с ней много работал, да и в целом она классная, если интересно по подробнее почему, то иди воооот сюда. Итак, давайте ее ставить.

$ sudo apt install postgresql postgresql-contrib

А вот так :-)
Ну вот скачали postgres, давайте создадим себе пользователя и базу данных для него.

$ sudo -i -u postgres

И вот мы вошли в учетную запись postgres на нашем сервере (компе). Но нам нужно попасть в терминал:

$ psql

И вот мы в терминале, круто. Теперь пошли создавать юзера:

CREATE USER simple_user WITH PASSWORD 'simple_password';

Если все супер, то ты увидишь тип такого. Если что, вместо simple_user и simple_password можно свои какие-то данные ввести.

Создание пользователя
Создание пользователя

Ну а теперь давайте создадим базу данных:

CREATE DATABASE simple_db WITH OWNER = simple_user;
Создание базы данных
Создание базы данных

Супер, база данных есть. Ну осталось добавить прав пользователю, что бы могли тестить и в целом пусть будет крутым:

Наделяем правами
Наделяем правами

Глава 2. Venv

Зачем оно нам?

Все очень просто. Представь ты пишешь параллельно 3 проекта. На одном используется Python3.8, а на другом Python3.10. И ты собираешься постоянно переустанавливать версию? Нет конечно, это сложно. Для таких ситуаций придумали виртуальное окружение. Это типа когда у тебя создается кусок в памяти, где и будет крутиться вся наша задача. Ну чтож, ставим:

$ sudo apt install -y python3-venv

Ну а теперь создадим в нашей директории:

$ python3 -m venv venv

Вместо второго venv можно ставить свои названия, но все обычно называют venv.

Ну и последнее, активируем окружение:

source venv/bin/activate

Ну а для дезактивации используем следующее:

$ source venv/bin/deactivate

Глава 3. Django

Фуф, как-то так. Теперь погнали поставим Django. Для этого введем следующее:

pip install python3-django

Ждем и получаем Django на сервере (компе). Ок, теперь наконец-то давайте создадим проект:

django-admin startproject simple_site

И вот, что же мы тут видим:

Содержимое
Содержимое

А вот что в каталоге simple_site:

Содержимое
Содержимое

Ну вот мы и закончили первую часть туториала. Фуф, вроде бы я поставил все то, что нам нужно. Всем удачи и до встречи :-)

Комментарии (10)


  1. Crait
    21.08.2023 11:51
    +5

    Кажется, было бы лучше не разворачивать постгрес как сервис в убунте, а разворачивать его напрямую в докере, а весь проект включая запуск миграций, БД, веб завернуть в докер-компоуз

    Так получится и потом выложить весь проект на гитхаб/гитлаб , чтобы его можно было запустить без лишних манипуляций с системой


    1. garmonik_m Автор
      21.08.2023 11:51
      -1

      Да, но я хотел просто показать то, как начать проект, если ты только начинаешь это изучать.


      1. reatfly
        21.08.2023 11:51
        -1

        Для этого лучше использовать SQLite


        1. garmonik_m Автор
          21.08.2023 11:51

          Возможно, но я когда впервые встретился с Postgres, то у меня были некоторые затруднения, поэтому хотел сделать так, чтобы другим было понятно как работать с Postgres, а не с SQLite.


      1. Crait
        21.08.2023 11:51
        +1

        Если развернуть постгрес в докере, то для настройки понадобится только переменные передать при запуске контейнера - не надо будет проваливаться в другого юзера, в Шелл постгреса

        Кажется, что вариант попроще получается :)


        1. garmonik_m Автор
          21.08.2023 11:51

          Думаю да, возможно тогда в будущем перенесу все в докер


      1. cadmi
        21.08.2023 11:51
        +3

        Я не хочу вас расстраивать, но вы сначала ставите django через apt, а потом создаете виртуальное окружение. Поскольку вы создаете его по умолчанию, без ключа --system-site-packages (python3 -m venv --system-site-packages venv) то установленные в глобальный python пакеты (включая django) вы внутри этого venv не увидите. И вам django придется ставить еще раз, внутри вашего виртуального окружения.

        То есть это телодвижение (установка django через apt в глобальный python) не имеет смысла. Ну раз уж вы собрались "показывать, как начать, если только начинаешь".


        1. garmonik_m Автор
          21.08.2023 11:51

          прошу прощения, согласен, сейчас исправлю


          1. cadmi
            21.08.2023 11:51
            +2

            Не в ту сторону исправили, не добавляйте вы этот ключ! Не учите плохому! :)

            Не устанавливайте django через apt. Создавайте чистое окружение (этот ключ не зря выключен по умолчанию) и внутрь него через pip install ставьте django.


  1. ubuntuandrew
    21.08.2023 11:51
    +1

    Чавось? Зачем?

    Крайне странно видеть такую подачу на хабре - статья из серии "свой VPN за пять минут", которыми наводнен Интернет.

    И изначально, я бы задался вопросом, почему выбран именно Django - на мой взгляд, для подобных проектов больше подходит FastAPI, а ORM выбрать по вкусу, при развитии довольно неплохо масштабируется. Новичкам тоже бы советовал начинать с Flask-подобных фреймворков подобных - хоть и чуть больше надо руками делать, зато не будет ощущения волшебного "черного ящика"