Фреймворк django rest

Плюсы Джанго

Принцип «Всё включено» («Batteries included»)

Фраза «всё включено» означает, что большинство инструментов для создания приложения — часть фреймворка, а не поставляются в виде отдельных библиотек.

Django содержит огромное количество функциональности для решения большинства задач веб-разработки. Вот некоторые из высокоуровневых возможностей Django, которые вам придётся искать отдельно, если вы предпочтёте микро-фреймворк:

  • ORM
  • Миграции базы данных
  • Аутентификация пользователя
  • Панель администратора
  • Формы

Стандартизированная структура

Django как фреймворк задаёт структуру проекта. Она помогает разработчикам понимать, где и как добавлять новую функциональность.

Благодаря одинаковой для всех проектов структуре гораздо проще найти уже готовые решения или получить помощь от сообщества. Огромное количество увлеченных разработчиков поможет справиться с любой задачей гораздо быстрее.

Приложения Django

Приложения в Django позволяют разделить проект на несколько частей. Приложения устанавливаются путём добавления в settings.INSTALLED_APPS. Этот подход позволяет легко интегрировать готовые решения.

Сотни универсальных модулей и приложений очень сильно ускорят разработку. Взгляните на их список на сайте djangopackages.org.

Безопасный по умолчанию

Django безопасен из коробки и включает механизмы предотвращения распространенных атак вроде SQL-инъекций (XSS) и подделки межсайтовых запросов (CSRF). Подробнее об этом можно почитать в официальном руководстве по безопасности.

REST Framework для создания API

Django REST Framework, который часто сокращают до «DRF», является библиотекой для построения API. Он имеет модульную и настраиваемую архитектуру, которая хорошо работает для создания как простых, так и сложных API.

В DRF политики аутентификации и разрешений доступны из коробки. Он поставляется с базовыми классами для CRUD операций и встроенной утилитой для тестирования разрабатываемого API.

GraphQL фреймворк для создания API

Большие REST API часто требуют большого количества запросов для получения всех необходимых данных. GraphQL — это язык запросов, который позволяет обмениваться связанными данными гораздо проще. Подробнее почитать про основные концепции GraphQL можно в официальной документации.

Graphene-Django позволит легко добавить соответствующую функциональность в ваш проект. Модели, формы, аутентификация, политики разрешений и другие функциональные возможности Django можно использовать для создания GraphQL API. Библиотека так же поставляется с утилитой для тестирования результата.

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

Если вы используете Django первый раз, вам придется позаботиться о некоторых первоначальных настройках. А именно, сгенерировать основу Django – настройки проекта, базы данных, приложений и др.

Используя командную строку, перейдите в каталог, где вы хотите хранить код, и выполните следующую команду:

django-admin.py startproject mysite

Это создаст каталог mysite в текущем каталоге. Если нет, смотрите .

Примечание

Вы не должны использовать в качестве названия проекта названия компонентов Python или Django. Это означает, что проект не может называться django (что конфликтует с Django) или test (конфликтует со стандартным пакетом Python).

Where should this code live?

Если вы раньше использовали PHP, то, наверное, привыкли размещать код проекта в корневом каталоге сайта на Web-сервере (например, /var/www). C Django вы не должны этого делать. Это плохая идея добавлять код проекта в корень Web-сервера, так как есть риск, что он будет доступен для просмотра. Не делайте этого в целях безопасности.

Разместите код в каталоге вне корневой директории сайта, например /home/mycode.

Давайте посмотрим, что было создано при помощи команды :

mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        wsgi.py

Doesn’t match what you see?

Структура проекта по умолчанию была недавно изменена. Если вы видите “простую” структуру (без внутреннего каталога mysite/), возможно вы используете версию Django, которая не соответствует этому учебнику. Вам следует читать старую версию учебника или обновить Django.

Рассмотрим эти файлы:

  • Внешний каталог mysite/ – это просто контейнер для вашего проекта. Его название никак не используется Django, и вы можете переименовать его во что угодно.

  • manage.py: Скрипт, который позволяет вам взаимодействовать с проектом Django. Подробности о manage.py читайте в разделе django-admin.py and manage.py.

  • Внутренний каталог mysite/ — это пакет Python вашего проекта. Его название – это название пакета Python, которое вы будете использовать для импорта чего-либо из проекта (например, mysite.urls).

  • mysite/__init__.py: Пустой файл, который указывает Python, что текущий каталог является пакетом Python. (Читайте в официальной документации Python, если вы новичок в Python.)

  • mysite/settings.py: Настройки/конфигурация проекта. Раздел Django settings расскажет вам все о настройках проекта.

  • mysite/urls.py: Конфигурация URL-ов для вашего проекта Django. Это “содержание” всех Django-сайтов. Вы можете прочитать о конфигурации URL-ов в разделе Менеджер URL-ов.

  • mysite/wsgi.py: Точка входа вашего проекта для WSGI-совместимых веб-серверов. Подробности читайте в разделе Развёртывание с WSGI.

Сервер для разработки

Давайте проверим, что все заработало. Перейдите во внешний каталог mysite, если вы этого еще не сделали, и выполните команду python manage.py runserver. Вы увидите следующий вывод:

Validating models...

0 errors found
March 30, 2016 - 15:50:53
Django version 1.6, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

Только что вы запустили сервер для разработки Django, простой Web-сервер написанный на Python. Мы включили его в Django, чтобы вы сразу могли приступить к разработке, без дополнительной настройки боевого веб-сервера – например, Apache – пока вам это действительно не понадобится.

Следует заметить: НИКОГДА НЕ используйте этот сервер на “живом” сайте. Он создан исключительно для разработки. (Мы умеем делать Web-фреймверки, не Web-сервера.)

Теперь, когда сервер запущен, перейдите на страницу http://127.0.0.1:8000/ в браузере. Вы увидите страницу с “Welcome to Django”. Работает!

Changing the port

По умолчанию, команда запускает сервер для разработки на локальном IP используя порт 8000.

Если вы хотите изменить порт, укажите его как аргумент. Например, эта команда запускает сервер используя порт 8080:

$ python manage.py runserver 8080

Если вы хотите изменить IP, передайте его вместе со значением порта. Чтобы слушать все публичные IP (полезно, если вы хотите показать свою работу на других компьютерах), используйте:

$ python manage.py runserver 0.0.0.0:8000

Смотрите полное описание команды .

Automatic reloading of

Dev-сервер самостоятельно перегружается при изменении файлов. Однако некоторые действия не перегружают сервер, например, добавление новых файлов или компилирование файлов перевода. В таких случаях необходимо самостоятельно перегрузить сервер.

Установка Django через pipenv

Для того чтобы оценить в действии, создадим новую директорию и установим Django. Первым делом переместимся на рабочий стол Desktop. Там будет создана новая директория , куда нам нужно будет попасть при помощи команды .

Shell

$ cd ~/Desktop
$ mkdir django
$ cd django

1
2
3

$cd~Desktop

$mkdirdjango

$cddjango

Теперь используем Pipenv для инсталляции Django.

Shell

$ pipenv install django==3.0

1 $pipenv install django==3.0

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

Shell

$ pipenv shell

1 $pipenv shell

При работе на Ubuntu вы увидите, что название текущей директории в командной строке взято в скобки. Это значит, что виртуальное окружение активировано. Будучи внутри папки , перед знаком командной строки мы увидим .

Стоит иметь в виду, что из-за в системе Windows, сейчас нет возможности получить визуальное подтверждение об активации виртуального окружения. Однако в следующей секции можно запустить — тогда станет ясно, что виртуальное окружение Django установлено должным образом.

Shell

(django) $

1 (django)$

Все работает! Теперь создаем новый проект Django под названием при помощи следующей команды. Не забудьте в конце поставить точку.

Shell

(django) $ django-admin startproject test_project .

1 (django)$django-admin startproject test_project.

Немного остановимся на причине использования точки (.) в предыдущей команде. Если вы просто запустите то Django по умолчанию создаст следующую структуру:

Структура

Shell

└── test_project
├── manage.py
└── test_project
├── __init__.py
├── settings.py
├── urls.py
└── wsgi.py

1
2
3
4
5
6
7

└──test_project

├──manage.py

└──test_project

├──__init__.py

├──settings.py

├──urls.py

└──wsgi.py

Как видите, создается новая директория , в ней файл и еще одна директория . Чувствуется повторение, ведь ранее мы уже создали директорию на рабочем столе и переместились в нее. Будет лучше выполнить команду с точкой на конце. Это нужно для установки в данную конкретную папку — на сей раз результат будет таков:

Структура 

Shell

├── manage.py
└── test_project
├── __init__.py
├── settings.py
├── urls.py
└── wsgi.py

1
2
3
4
5
6

├──manage.py

└──test_project

├──__init__.py

├──settings.py

├──urls.py

└──wsgi.py

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

Осталось убедиться, что все работает. Для этого запустим локальный веб-сервер Django.

Shell

(django) $ python manage.py runserver

1 (django)$python manage.pyrunserver

Мы получим такой ответ:

Shell

Watching for file changes with StatReloader
Performing system checks…

System check identified no issues (0 silenced).

You have 17 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run ‘python manage.py migrate’ to apply them.

May 05, 2020 — 12:36:09
Django version 3.0, using settings ‘test_project.settings’
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

1
2
3
4
5
6
7
8
9
10
11
12

Watching forfilechanges with StatReloader

Performing system checks…

System check identified no issues(silenced).

You have17unapplied migration(s).Your project may notwork properly untilyou apply the migrations forapp(s)admin,auth,contenttypes,sessions.

Run’python manage.py migrate’toapply them.

May05,2020-123609

Django version3.0,using settings’test_project.settings’

Starting development server athttp127.0.0.18000

Quit the server with CONTROL-C.

При посещении откроется следующая страница:

Приветственная страница Django

Для остановки локального сервера используйте комбинацию . После этого выйти из виртуального окружения можно при помощи команды .

Shell

(django) $ exit

1 (django)$exit

Вновь активировать виртуальное окружение можно в любое время. — для этого используется команда в терминале.

Если вы сталкиваетесь с виртуальными окружениями впервые, сейчас они могут показаться немного запутанными, но не беспокойтесь — по ходу изучения все прояснится. Базовый принцип строится на установке новых пакетов через , их активации с и выхода через по мере завершения процесса.

Будет не лишним отметить, что через командную строку за раз можно активировать только одно виртуальное окружение. Мы будем создавать новое виртуальное окружение для каждого проекта. По этой причине перед созданием нового проекта не забывайте выходить из текущего окружения через или открывайте другие вкладки для новых проектов.

Теория Python

Онлайн учебники

  • Codecademy — это действительно хорошее место, чтобы начать учиться с нуля. Но после обновления обучающих программ, задания стали слишком простыми. Еще одним недостатком является небольшое количество инструкций по Django;
  • Coursera — замечательный ресурс, где вы будете работать с кодом на регулярной основе. Но, если начинаете курс новичка, вам следует подождать (иногда несколько недель) начала расширенных тем;
  • Tutorialspoint — лучше всего описывать, как упрощенную версию официальной документации. Здесь вы можете найти описание большинства базовых понятий, ключевых терминов и некоторых встроенных библиотек. Описание краткое и четкое. Для большинства новичков это отличный вариант, но это не то место, где стоит начинать с нуля;
  • SoloLearn — предлагает набор мобильных обучающих программ, включая Python. Действительно приятные курсы для тех, кто не может заснуть без серфинга с мобильного телефона. Теоретическая часть хороша, однако практические задачи иногда кажутся труднопреодолимыми. Некоторые примеры еще сложнее и не помогут вам в реальной ситуации. Большая часть приложения — это простые тесты.

Обратно несовместимые изменения в 3.2 ¶

API серверной части базы данных

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

  • Новое свойство заменяет эти функции:
  • Чтобы включить поддержку для покрытия индексов ( ) и покрытия уникальных ограничений ( ), установите
    значение .
  • Сторонние серверные части баз данных должны реализовывать поддержку сортировки базы данных столбцов по s и s или set
    and
    to . Если недетерминированные сопоставления не поддерживаются, установите
    значение .
  • удален в пользу новой
    функции базы данных.
  • и
    теперь возьмите необязательный
    аргумент для усечения в определенном часовом поясе.
  • теперь получает аргументы и необязательный словарь с переменными среды для основного клиента командной строки из
    метода. Сторонние серверные части баз данных должны быть реализованы или переопределены .
  • Сторонние серверные части баз данных должны поддерживать функциональные индексы ( ) или
    иметь значение . Если
    не является частью инструкции, установите
    значение .
  • Ссылки пагинации в админке теперь индексируются 1 вместо 0, т.е. строка запроса для первой страницы вместо .
  • Новое универсальное представление администратора нарушит шаблоны URL-адресов, маршрутизируемые после URL-адресов администратора и соответствующие префиксу URL-адреса администратора. Вы можете настроить порядок URL или, в случае необходимости, установить на отключение приема всей точки зрения. Подробнее см. .
  • Минифицированные файлы JavaScript больше не включены в админку. Если вам необходимо минимизировать эти файлы, рассмотрите возможность использования стороннего приложения или внешнего инструмента сборки. Минифицированные поставляемые файлы JavaScript, упакованные с администратором (например, ), по-прежнему включены.
  • больше не удаляет английские стоп-слова, такие как или .
  • Поддержка PostGIS 2.2 удалена.
  • Серверная часть Oracle теперь клонирует полигоны (и коллекции геометрии, содержащие полигоны) перед их переориентацией и сохранением в базе данных. Они больше не видоизменяются. Вы можете заметить это, если используете многоугольники после сохранения модели.

Прекращена поддержка PostgreSQL 9.5

Поддержка PostgreSQL 9.5 в апстриме заканчивается в феврале 2021 года. Django 3.2 поддерживает PostgreSQL 9.6 и выше.

Пишем тесты для Django приложений

Наконец-то мы добрались до тестов

Хотя в приложениях это является базовым концептом, очень важно, чтобы добавление тестов в Django вошло у вас в привычку. Цитируя Джейкоба Каплан-Мосса, одного из создателей Django: «Непротестированный код можно считать сломанным«

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

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

Кроме того, когда мы делаем определенные изменения в коде — добавляем новый функционал, изменяем существующий, удаляем неиспользуемые элементы сайта — мы должны быть уверены в том, что все оставшиеся аспекты сайта по-прежнему работают должным образом. Автоматические тесты действуют таким образом, что компьютер каждый раз будет проверять работоспособность проекта, отталкиваясь от единожды написанного ранее правильного кода. К счастью, в Django есть встроенные инструменты для написания и запуска тестов.

Python

# pages/tests.py
from django.test import SimpleTestCase

class SimpleTests(SimpleTestCase):
def test_home_page_status_code(self):
response = self.client.get(‘/’)
self.assertEqual(response.status_code, 200)

def test_about_page_status_code(self):
response = self.client.get(‘/about/’)
self.assertEqual(response.status_code, 200)

1
2
3
4
5
6
7
8
9
10
11
12

# pages/tests.py

fromdjango.testimportSimpleTestCase

classSimpleTests(SimpleTestCase)

deftest_home_page_status_code(self)

response=self.client.get(‘/’)

self.assertEqual(response.status_code,200)

deftest_about_page_status_code(self)

response=self.client.get(‘/about/’)

self.assertEqual(response.status_code,200)

База данных нам пока не нужна, поэтому сейчас можно использовать простой . При наличии базы данных нужно обратиться к . Затем проводится проверка, в результате которой у каждой страницы должен быть код состояния 200 — это успешный ответ на стандартный HTTP запрос. Таким образом, становится понятно, что запрашиваемая страница действительно существует, но при этом не раскрывается ее содержимое.

Для запуска теста остановите веб-сервер, использовав комбинацию , а затем наберите в командной строке :

Shell

(pages) $ python manage.py test
Creating test database for alias ‘default’…
System check identified no issues (0 silenced).
..
———————————————————————-
Ran 2 tests in 0.014s

OK
Destroying test database for alias ‘default’…

1
2
3
4
5
6
7
8
9

(pages)$python manage.pytest

Creating testdatabase foralias’default’…

System check identified no issues(silenced).

..

———————————————————————-

Ran2tests in0.014s

 
OK

Destroying testdatabase foralias’default’…

Все успешно! В будущем мы будем использовать более сложные тесты, особенно это важно при работе с базами данных

Установка Django

Теперь у нас все
готово для установки самого фреймворка Django в созданное
виртуальное окружение. Так как я в своей работе использую интегрированную среду
PyCharm, то дальнейшие
действия по работе с виртуальным окружением буду делать через нее. Уверен, что
большинство из вас тоже пользуются PyCharm, поэтому все
должно быть предельно понятно. Итак, открываем созданный проект, указав папку:

D:/Python/django/djsite

и после
индексирования всех файлов интегрированная среда автоматически активизирует
установленное виртуальное окружение. Если это по каким-то причинам не
произошло, то нужно вручную указать PyCharm это окружение.
Для
этого следует перейти на вкладку Project Interpreter:

File
-> Settings -> Project:djsite -> Project Interpreter

и указать
интерпретатор из установленного окружения.

Далее, находясь
в корневой папке проекта, мы должны выполнить непосредственно установку Django с помощью
очевидной команды:

pip install
django

После этого в
наше виртуальное окружение будет устанавливаться данный фреймворк со всеми
необходимыми зависимостями. Если теперь выполнить команду:

pip list

то мы увидим
последнюю рабочую версию Django и несколько дополнительных
пакетов, необходимых для его работы.

Но это лишь ядро
фреймворка с общим функционалом. Используя это ядро, мы можем создавать
множество разных сайтов под управлением Django в рамках
текущего виртуального окружения. Чтобы посмотреть список команд ядра,
достаточно в терминале записать:

django-admin

Так вот, для
создания нашего первого сайта, нам понадобится команда startproject, которая
записывается так:

django-admin
startproject <имя сайта>

Здесь «имя
сайта», обычно, является доменным именем. Например, если мы собираемся
располагать сайт на домене:

coolsite.ru

то в качестве
имени логично выбрать coolsite. Давайте так и сделаем, выполним команду:

django-admin
startproject coolsite

Давайте теперь
запустим тестовый веб-сервер на нашем локальном компьютере и убедимся, что
созданный сайт работает. Для этого перейдем в папку coolsite:

cd coolsite

и выполним файл manage.py с командой runserver:

python manage.py
runserver

Преимущество
отладочного сервера в том, что он автоматически перезапускается при изменении
программы сайта. На практике это дает большое удобство. Но полностью полагаться
на эту возможность не стоит, так как иногда Django все же
игнорирует изменения, а точнее, новые дополнения, например, новые созданные
файлы. Поэтому, если вы видите, что что-то работает не так, попробуйте просто
перезапустить сервер вручную. Для его завершения достаточно нажать комбинацию
клавиш:

Ctrl + Break (а также Ctrl + C в Windows)

а, затем, снова
запустить:

python manage.py
runserver

Также обратите
внимание, что при первом запуске сервера в проекте появился еще один файл db.sqlite3 – файл БД SQLite3. Дело в том,
что по умолчанию Django использует именно такую СУБД

В
дальнейшем, мы можем это изменить и указать любую другую СУБД, которую
поддерживает данный фреймворк. Это может быть:

PostgreSQL, MariaDB, MySQL, Oracle и SQLite

Но вернемся к
запуску сервера. Его можно запускать также и со следующими параметрами:

python
manage.py runserver 4000

или так:

python manage.py runserver
192.168.1.1:4000

Я, надеюсь, из
этого занятия вы поняли, что из себя представляет фреймворк Django, как он
устанавливается, как создать проект нового сайта и как проверить его
работоспособность с помощью тестового веб-сервера.

Видео по теме

#1. Django — что это такое, порядок установки

#2. Модель MTV. Маршрутизация. Функции представления

#3. Маршрутизация, обработка исключений запросов, перенаправления

#4. Определение моделей. Миграции: создание и выполнение

#5. CRUD — основы ORM по работе с моделями

#6. Шаблоны (templates). Начало

#7. Подключение статических файлов. Фильтры шаблонов

#8. Формирование URL-адресов в шаблонах

#9. Создание связей между моделями через класс ForeignKey

#10. Начинаем работу с админ-панелью

#11. Пользовательские теги шаблонов

#12. Добавляем слаги (slug) к URL-адресам

#13. Использование форм, не связанных с моделями

#14. Формы, связанные с моделями. Пользовательские валидаторы

#15. Классы представлений: ListView, DetailView, CreateView

#16. Основы ORM Django за час

#17. Mixins — убираем дублирование кода

#18. Постраничная навигация (пагинация)

#19. Регистрация пользователей на сайте

#20. Делаем авторизацию пользователей на сайте

#21. Оптимизация сайта с Django Debug Toolbar

#22. Включаем кэширование данных

#23. Использование капчи captcha

#24. Тонкая настройка админ панели

#25. Начинаем развертывание Django-сайта на хостинге

#26. Завершаем развертывание Django-сайта на хостинге

Улучшаем админку

Одно из слабых мест джанго-админки — главная страница. Идея авто-группировки моделей по приложениям и вывод столбиком в одну колонку работает только на начальных этапах, дальше это становится просто неудобно — куча лишней информации и довольно сложные пути для того, чтобы добавить полезную. Ну, например, чтобы названия приложений писались русскими буквами — полностью перекрывать шаблон.
И тут на помощь приходит django-admin-tools. С этим приложением минут за 20 можно получить «приборную панель» с произвольной группировкой приложений/моделей, вкладками, любым числом колонок, различными блоками, которые каждый пользователь сможет расставить, как ему удобнее, скрывать и сворачивать по желанию, закладками, настраиваемым меню и удобным способом добавления во все это хозяйство всего, чего только можно придумать.
Вот так, например, сейчас выглядит админка к сайту НадоВместе:
(это только часть, вот скриншот целиком)
Разберемся поподробнее.

Unsupported previous releases

These release series no longer receive security updates or bug fixes.

Release Series Latest Release End of mainstream support End of extended support
3.0 3.0.14 August 3, 2020 April 6, 2021
2.1 2.1.15 April 1, 2019 December 2, 2019
2.0 2.0.13 August 1, 2018 April 1, 2019
1.11 LTS 1.11.29 December 2, 2017 April 1, 2020
1.10 1.10.8 April 4, 2017 December 2, 2017
1.9 1.9.13 August 1, 2016 April 4, 2017
1.8 LTS 1.8.19 December 1, 2015 April 1, 2018
1.7 1.7.11 April 1, 2015 December 1, 2015
1.6 1.6.11 September 2, 2014 April 1, 2015
1.5 1.5.12 November 6, 2013 September 2, 2014
1.4 LTS 1.4.22 February 26, 2013 October 1, 2015
1.3 1.3.7 March 23, 2012 February 26, 2013

Security fixes, data loss bugs, crashing bugs, major functionality
bugs in newly-introduced features, and regressions from older versions of Django. Security fixes and data loss bugs. Last version to support Python 2.7.

Конвертеры маршрутов в Django 2.0+ (path converters)

Всем привет!
Маршрутизация в Django со второй версии фреймворка получила замечательный инструмент — конвертеры. С добавлением этого инструмента появилась возможность не только гибко настраивать параметры в маршрутах, но и разделять зоны ответственности компонентов.
Меня зовут Александр Иванов, я наставник в Яндекс.Практикуме на факультете бэкенд-разработки и ведущий разработчик в Лаборатории компьютерного моделирования. В этой статье я расскажу о конвертерах маршрутов в Django и покажу преимущества их использования.
Первое, с чего начну, — границы применимости:

  1. версия Django 2.0+;
  2. регистрация маршрутов должна выполняться с помощью .

Итак, когда к Django-серверу прилетает запрос, он сперва проходит через цепочку middleware, а затем в работу включается URLResolver (). Задача последнего — найти в списке зарегистрированных маршрутов подходящий.
Для предметного разбора предлагаю рассмотреть следующую ситуацию: есть несколько эндпоинтов, которые должны формировать разные отчёты за определённую дату. Предположим, что эндпоинты выглядят так:

Активация моделей¶

Эта небольшая часть кода моделей предоставляет Django большое количество информации, которая позволяет Django:

  • Создать структуру базы данных (CREATE TABLE) для приложения.

  • Создать Python API для доступа к данным объектов Poll и Choice.

Но первым делом мы должны указать нашему проекту, что приложение polls установлено.

Philosophy

Приложения Django “подключаемые”: вы можете использовать приложение в нескольких проектах и вы можете распространять приложение, так как они не связаны с конкретным проектом Django.

Отредактируйте файл settings.py и измените настройку добавив строку 'polls'. В результате получим:

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # Uncomment the next line to enable the admin:
    # 'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
    'polls',
)

Теперь Django знает что необходимо использовать приложение polls. Давайте выполним следующую команду:

python manage.py sql polls

Вы увидите приблизительно такое (SQL запросы CREATE TABLE для приложения голосования):

BEGIN;
CREATE TABLE "polls_poll" (
    "id" serial NOT NULL PRIMARY KEY,
    "question" varchar(200) NOT NULL,
    "pub_date" timestamp with time zone NOT NULL
);
CREATE TABLE "polls_choice" (
    "id" serial NOT NULL PRIMARY KEY,
    "poll_id" integer NOT NULL REFERENCES "polls_poll" ("id") DEFERRABLE INITIALLY DEFERRED,
    "choice" varchar(200) NOT NULL,
    "votes" integer NOT NULL
);
COMMIT;

Обратите внимание на следующее:

  • Полученные запросы зависят от базы данных, которую вы используете.

  • Названия таблиц созданы автоматически из названия приложения(polls) и названия модели в нижнем регистре – poll и choice. (Вы можете переопределить это.)

  • Первичные ключи (ID) добавлены автоматически. (Вы можете переопределить и это.)

  • Django добавляет "_id" к названию внешнего ключа. (Да, вы можете переопределить и это.)

  • Внешний ключа определяется явно через REFERENCES.

  • Учитываются особенности базы данных, которую вы используете. Специфические типы данных такие как auto_increment (MySQL), serial (PostgreSQL), или integer primary key (SQLite) будут использоваться автоматически. То же касается и экранирование называний, что позволяет использовать в названии кавычки – например, использование одинарных или двойных кавычек. Автор этого урока использует PostgreSQL, так что примеры используют синтаксис PostgreSQL.

  • Команда не выполняет SQL запросы в базе данных — она просто выводит их на экран, чтобы вы могли увидеть какой SQL создает Django. Если вы хотите, можете скопировать и выполнить этот SQL в консоли вашей базы данных. Однако, Django предоставляет более простой способ выполнять SQL в базе данных.

Если вам интересно, запустите следующие команды:

  • – Проверяет на ошибки структуру ваших моделей.

  • – Выводит (такие как изменения в таблице или дополнительные правила) определенные для приложения.

  • – Выводит необходимые DROP TABLE запросы для этого приложения, учитывая таблицы, которые уже существуют в базе данных (если такие есть).

  • – Выводит CREATE INDEX запросы для приложения.

  • – Выводит комбинацию SQL запросов команд , , из .

Изучение вывода этих команд может помочь вам понять что на самом деле происходит.

Теперь, выполните команду снова, чтобы создать таблицы для этих моделей в базе данных:

python manage.py syncdb

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

Установка и настройка среды разработки Python/Django

На этом этапе мы видим перед собой приветственное окно приложения с предложением создать новый проект, открыть существующий или же импортировать из системы контроля версий. Нас же пока интересует первый пункт – Create New Project. Нажимаем его и переходим в созданию нового проекта.

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

Вторая строчка Interpreter отвечает за выбор установленного в системе интерпретатора языка Python. Их может быть несколько, но пока мы не будем вдаваться в нюансы. Сразу отмечу, что для каждого проекта лучше создавать отдельную виртуальную среду (VirtualEnv), которая будет содержать установленные модули, необходимые для конкретного проекта и их настройки и версии не будут влиять на другие проекты. Давайте создадим новую VirtualEnv нажав на шестеренке справа и выбрав пункт Create VirtualEnv.

Для VirtualEnv так же необходимо задать имя, выбрать расположение в файловой системе и версию интерпретатора Python, которая будет использоваться. Я предпочитаю виртуальной среде давать имена аналогичные проекту, чтобы так же легко можно было разобраться для какого проекта она была создана.

Нажимаем ОК и ждем пока закончится процесс создания виртуальной среды. После нажимаем на кнопку Create внизу справа и запускаем процесс создания проекта.

Далее откроется окошко среды разработки, которое сигнализирует о том, что проект создан и теперь мы может переходить к разработке сайта на Django.

Для дальнейших манипуляций открываем Терминал, нажав на кнопку внизу слева.

Что бы я хотел знать когда начинал изучать Django? — очень общий взгляд

Tutorial

Здесь на Хабре много различных инструкций по использованию Django. Эти инструкции часто включают много кода и представляют последовательность шагов, которые нужно сделать, чтобы создать проект.
Когда я начинал изучать Django и Wagtail по таким инструкциям, меня часто смущало, что пара команд создает кучу непонятных файлов (особенно на самом старте). Последующее описание этих файлов в инструкциях содержало слишком много деталей, которые трудно было усвоить за раз.
В этом посте я бы хотел посмотреть на Django с очень «философского вида» — минимум кода, максимум общих фактов. Думаю, что такой взгляд поможет тем, кто хочет начать изучать Django но теряется на старте.

4) Django Extensions

Django Extensions, пожалуй, один из старейших пакетов Django. Он заслуживает отдельной статьи. Однако вот несколько функций, которые полезно знать:

shell_plus

./manage.py shell_plus

Указанная выше команда запустит оболочку Django с моделями всех ваших приложений, импортированными и готовыми к использованию. Нам нравится комбинировать его с IPython для лучшего автозаполнения.

RunScript

Иногда необходимо запустить скрипт в  приложении Django. Обычно в процессе написания своего скрипта используется оболочка Django для управления разработкой. Затем всё оборачивается в Django-команду. Однако с помощью команды RunScript вы сможете запустить скрипт напрямую, заключив его в простую функцию. Например, если вы хотите написать скрипт для удаления всех объектов Question в вашей базе данных, это будет очень просто:

from polls.models import Question

def run():
	# Fetch all questions
	questions = Question.objects.all()
	# Delete questions
	questions.delete()

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

./manage.py manage.py runscript  delete_all_questions

syncdata

Эта функция сбросит вашу базу данных таким образом, что она будет содержать только указанные вами фикстуры. Именно так, как вы указали их в фикстур-файле.

graph_models

Данная команда построит графики моделей ваших приложений. Это позволит вам увидеть лежащие в основе отношения, аналогичные ER-модели.

Windows 10 + Python = VS Code + WSL

Tutorial

Microsoft… Технологических локомотивов нашего времени. Ни для кого не секрет что они крутые, а также, что они поглощают все больше и больше… Всего. К счастью последнее время они только радуют меня своим потенциалом. А после выступления Satya Nadella, где он рассказал миру о том, что Windows больше не является основным продуктом компании, так как они положили курс на внедрение своих API…. Повсюду
Для разработчиков ПО они так же не скупятся. C#, Azure, Visual Studio… Но сейчас пойдет речь о Python, ведь для него местечко здесь тоже пригрели.

Кратко о WSL

С обновлением Windows появилась возможность использовать такую штуку, как WSL (Windows Subsystem for Linux). Не так давно появилась WSL2 с ОЧЕНЬ крутыми доработками. WSL2 использует новейшую и самую новую технологию виртуализации для запуска ядра Linux внутри упрощенной служебной виртуальной машины. Это значит, что такие атрибуты, как изоляция и замедление работы здесь отсутствуют.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector