Настраиваем виртуальную среду

Создаем папку под проект и создаем в ней временный файлик

создаем среду под разработку (желательно через conda), для этого тыкаем внизу версию питона и выбираем вариант создание виртуальной среды

Выбираем вариант с conda

Выбираем версию питона

ждем, снова тыкаем внизу выбор интерпретатора и проверяем что он выбрался

затем удаляем файлик main.py

Создание django проекта

создаем текстовый файл requirements.txt

прописываем туда

django

затем в консольку (обязательно проверять что она подключилась к виртуальной среде) пишите

pip install -r requirements.txt

когда установка закончится пропишите в requirements.txt версию джанги, которая установилась

теперь можно создать структуру джанго приложения. Выполните команду:

django-admin startproject app

у вас слева появится куча файликов

переместите файлик так чтобы у вас не было вложенной папки app

запустите сервер через

python manage.py runserver

если зайти по указанной ссылке, то увидим базовую страницу джанги

Настраиваем работу с БД

ставим себе плагин для работы с БД

после того как поставили этот плагин можно открывать базу, если нажимать на базу правой кнопкой и выбрать OpenDatabase

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

http://localhost:8000/admin

но так как юзера нет, то попасть мы в нее не можем

запускаем команду

python manage.py migrate

тыкаем обновить БД

создаем суперюзера командой

python manage.py createsuperuser

Изучаем админку

идем в админку http://localhost:8000/admin и вводим данные для входа

заходим в юзеров

увидим там список пользователей

Создаем приложение в проекте

приложение – это просто папка со специальной структурой, в которую вынесена некоторая общая логика,

Чтобы его создать пишем команду (у меня будет проект про студентов, поэтому назову папку students)

python manage.py startapp students

Создаем модель

слева появится новая папка с кучей файликов. Нас интересует файлик models.py

создаем в ней класс Student

чтобы наш класс можно было подключать к админке и БД, надо добавить приложение в файлик settings вот сюда

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

python manage.py makemigrations

у нас появится файлик в папке migrations

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

Подключаем модель к админке

Идем в файлик students/admin.py и пишем там следующий код

заходим теперь в админку, тыкаем Students, а затем Add Student

там все будет на английском

чтобы поменять название полей на русский пишем в классе моделей:

если теперь обновить страницу админки увидим:

вы можете добавить студента, если заполните поля и нажмете SAVE

увидим что-то такое

чтобы слово Student и Students стали на понятном русскому человеку языку, надо в файле модели прописать

тогда в админке станет так

по умолчанию в списке выводится просто название модели,

если мы хотим, чтобы начали выводится какие-то конкретные поля, надо в файле admin указать выводимые поля в списке через свойство list_display

увидим такое:

чтобы стало понятно кто там все таким выводится, надо сделать следующее

Создаем зависимую таблицу

Попробуем теперь создать таблицу групп, и привяжем ее к таблице студентов через специально поле ForeignKey вот так:

если сейчас зайти в админку то увидим ошибку

это потому что мы создали таблице и новое поле, но не сделали миграцию.

Пишем снова команду

python manage.py makemigrations

и снова вызываем команду

python manage.py migrate

теперь если зайти в админку, то все начнет работать. А при создании нового студента даже появится выпадающий список, через который можно будет выбрать группу:

добавляем теперь админку под группы

добавим пару групп

теперь если зайти в юзера, увидим их в списке, правда опять же в виде названия моделей с id

чтобы выводилось что-то более осознанное, например, название, идем в models.py и добавляем группе, метод __str__

и теперь красота

удаляем поле, название группы у Student

не забываем его также убрать из admin.py

создаем миграцию на удаление поля

python manage.py makemigrations

ну и вызываем ее

python manage.py migrate

добавляем в админку вывод группы, уже через связанное поле

будет работать так же отлично

кстати можно указать конкретно поле которое вы хотите выводить, через двойное подчеркивание

тогда будет так (иногда это удобно)

Простой контроллер для страницы

Чтобы создать простую страницу для вывода данных, надо создать функцию в файлике views.py

и затем привязать эту функцию к роутеру

и тогда главная страница начнет чего-то показывать уже наше

если хочу вывести, например, что-то из базы то могу написать так

и уже выведется что-то поинтереснее:

правда использовать функции для контроллеров, это такое себе. Обычно используют классы. Классы более гибкие, и создавать их не сильно сложнее. Делается вот так:

класс привязывается к роутеру немного по-другому:

Шаблоны

если вы хотите использовать шаблонизатор, то надо создать папку templates и положить в нее файлик с шаблоном. Я создам вложенную папку, то есть внутри templates сделаю еще папку students и в нее уже положу шаблон

загоню туда стандартную разметку через ! и добавлю место под переменную students, которую мне надо будет как-то в шаблон передать

Чтобы джанга понимала где искать шаблоны надо добавить в settings.py

Чтобы подцепить контроллер к шаблону, надо наследовать ваш класс от класса TemplateView, указать путь к шаблону и переопределить функцию get_context, в которую собственно и передать данные для шаблона

Теперь можно чуть скорректировать шаблон

и глянуть как это все выводится

В общем, все это конечно здорово. Но нас интересует создание API для фронта. Поэтому генерация через шаблоны нам не пойдет.

Подключам Django Rest Framework

Для удобства создания api c основными CRUD операциями мы поставим еще одну библиотечку. Называется она Django Rest Framework

добавляем ее в requirements.txt

djangorestframework

и пишием

pip install -r requirements.txt

после установки пропишем установленную версию

теперь пойдем в файлик settings.py

создадим файлик api.py в папке students и загоним туда следующий код

теперь добавим в файл app/urls.py

теперь если зайти в по адресу http://localhost:8000/api, увидим такое

чтобы там стало видно наш вьюсет students надо добавить миксин в наш класс

добавим файлик serializers.py и запишем в него

и подключим в api

теперь если зайдем сюда, то там появится такая ссылка

если кликнуть по ссылке увидим, список студентов

кстати если к ссылке добавить json, типа http://localhost:8000/api/students.json, то увидим

добавим группу в сериализатор

теперь увидим такое в списке

мы кстати можем добавить вложенный сериализатор, чтобы выводить инфу по группе.

Для этого добавим его в serializers.py

и явно пропишем поле group в StudentSerialzier

получим такое

если хотим, чтобы объект можно было добавлять надо подмешать еще один миксин

правда для этого надо еще пометить поле group как read_only

попробуйте добавить миксины

и посмотрите, как поведет страница

Задание

Придумать себе тему для курсовой работы. Требования к БД

  1. Пять моделей
  2. Наличие минимум двух внешних ключей между таблицами

Что надо сделать:

  1. Настроить админку для всех моделей
  2. Использя DRF создать вьюсеты с набором основных CRUD операций и сериалайзеры для каждой модели
  3. Подключить вьюсеты в urls