Сегодня очень многие 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/)
Почему именно ее?
Ну я с ней много работал, да и в целом она классная, если интересно по подробнее почему, то иди воооот сюда. Итак, давайте ее ставить.
$ 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)
ubuntuandrew
21.08.2023 11:51+1Чавось? Зачем?
Крайне странно видеть такую подачу на хабре - статья из серии "свой VPN за пять минут", которыми наводнен Интернет.
И изначально, я бы задался вопросом, почему выбран именно Django - на мой взгляд, для подобных проектов больше подходит FastAPI, а ORM выбрать по вкусу, при развитии довольно неплохо масштабируется. Новичкам тоже бы советовал начинать с Flask-подобных фреймворков подобных - хоть и чуть больше надо руками делать, зато не будет ощущения волшебного "черного ящика"
Crait
Кажется, было бы лучше не разворачивать постгрес как сервис в убунте, а разворачивать его напрямую в докере, а весь проект включая запуск миграций, БД, веб завернуть в докер-компоуз
Так получится и потом выложить весь проект на гитхаб/гитлаб , чтобы его можно было запустить без лишних манипуляций с системой
garmonik_m Автор
Да, но я хотел просто показать то, как начать проект, если ты только начинаешь это изучать.
reatfly
Для этого лучше использовать SQLite
garmonik_m Автор
Возможно, но я когда впервые встретился с Postgres, то у меня были некоторые затруднения, поэтому хотел сделать так, чтобы другим было понятно как работать с Postgres, а не с SQLite.
Crait
Если развернуть постгрес в докере, то для настройки понадобится только переменные передать при запуске контейнера - не надо будет проваливаться в другого юзера, в Шелл постгреса
Кажется, что вариант попроще получается :)
garmonik_m Автор
Думаю да, возможно тогда в будущем перенесу все в докер
cadmi
Я не хочу вас расстраивать, но вы сначала ставите django через apt, а потом создаете виртуальное окружение. Поскольку вы создаете его по умолчанию, без ключа --system-site-packages (python3 -m venv --system-site-packages venv) то установленные в глобальный python пакеты (включая django) вы внутри этого venv не увидите. И вам django придется ставить еще раз, внутри вашего виртуального окружения.
То есть это телодвижение (установка django через apt в глобальный python) не имеет смысла. Ну раз уж вы собрались "показывать, как начать, если только начинаешь".
garmonik_m Автор
прошу прощения, согласен, сейчас исправлю
cadmi
Не в ту сторону исправили, не добавляйте вы этот ключ! Не учите плохому! :)
Не устанавливайте django через apt. Создавайте чистое окружение (этот ключ не зря выключен по умолчанию) и внутрь него через pip install ставьте django.