Similar presentations:
Django (Джанго) - свободный фреймворк для веб - приложений на языке Python
1. Django
** Django (Джанго, ['dʒæŋɡoʊ][6]) —
свободный фреймворк для веб-приложений на
языке Python, использующий шаблон
проектирования MVC[7]. Проект поддерживается
организацией Django Software Foundation.
2. История, версии
** Django органично росла во время разработки реальных
приложений, созданных командой разработки в Лоуренсе,
штат Канзас, США. Она родилась в конце 2003 когда
программисты газеты «Lawrence Journal-World», Эдриан
Холовати (Adrian Holovaty) и Симон Виллисон (Simon
Willison), начали использовать язык Python для разработки
своих приложений. Команда World Online, ответственная за
разработку и поддержку нескольких локальных новостных
сайтов, процветала в среде разработчиков, диктуемой
срочностью работы журналиста. Для сайтов, включая
LJWorld.com, Lawrence.com и KUsports.com, журналисты и
менеджеры требовали, чтобы новые возможности и целые
приложения были разработаны максимально быстро, часто
счёт шёл на дни или на часы. Таким образом, Симон и
Эдриан создали среду разработки экономящую время,
исходя из своих потребностей — это был единственный
способ, с помощью которого они могли создавать
управляемые приложения в жёстких рамках сроков.
3. История, версии
** Летом 2005, развив эту среду до такого состояния, что
она поддерживала большинство сайтов World Online,
команда разработчиков, включая Якоба Каплан-Мосса
(Jacob Kaplan-Moss), решила выпустить среду в виде
программного обеспечения с открытым исходным
кодом. Они выпустили его в июле 2005 под именем
Django в честь джазового гитариста Джанго Рэйнхарда
(Django Reinhardt
https://www.youtube.com/watch?v=5vMSGGX8RX8).
* Текущая версия: 2.2 LTS
* Последняя версия: 3.1 (4 августа 2020);
4. MVC
* Model-View-Controller (MVC,«Модель-ПредставлениеКонтроллер», «Модель-ВидКонтроллер») — схема разделения
данных
приложения, пользовательского
интерфейса и управляющей
логики на три отдельных
компонента: модель,
представление и контроллер —
таким образом, что модификация
каждого компонента может
осуществляться независимо[1].
*
5. Django
** Django - это высокоуровневая веб-инфраструктура
Python, которая позволяет быстро создавать
безопасные и поддерживаемые веб-сайты.
* Это бесплатный и открытый источник, имеет
процветающее и активное сообщество, отличную
документацию и множество опций для бесплатной и
платной поддержки.
* Django следует философии «Батарейки в комплекте» и
предоставляет почти все, что разработчики могут
захотеть сделать «из коробки». Поскольку все, что вам
нужно, является частью одного «продукта», все это
работает без проблем, следует последовательным
принципам проектирования, является расширяемым
и up-to-date documentation.
6. Гибкий
** Django может быть использован для создания
практически любого типа веб-сайта - от систем
управления контентом и вики, до социальных сетей и
новостных сайтов. Он может работать с любой
клиентской платформой и может доставлять контент
практически в любом формате (включая HTML, RSSканалы, JSON, XML и так далее).
7. Безопасный
** Django помогает разработчикам избегать многих
распространенных ошибок безопасности, предоставляя
инфраструктуру, которая была разработана для
«правильного решения», чтобы автоматически
защитить сайт. Например, Django обеспечивает
безопасный способ управления учетными записями
пользователей и паролями, избегая распространенных
ошибок, таких как включение информации о сеансе в
файлы cookie, где она уязвима (вместо этого кукифайлы содержат только ключ, а фактические данные
хранятся в базе данных), или хранение паролей в
открытом виде, вместо их хэшей.
8. Безопасный
** Хэш пароля - это значение фиксированной длины,
созданное путем обработки пароля
через криптографическую хэш-функцию. Django
может проверить правильность введенного пароля,
пропустив его через хэш-функцию и сравнив вывод с
сохраненным значением хэша. Благодаря
«одностороннему» характеру функции, даже если
сохраненное хэш-значение скомпрометировано,
злоумышленнику будет сложно извлечь исходный
пароль.
Django обеспечивает защиту от многих уязвимостей по
умолчанию, включая SQL-инъекцию, межсайтовый
скриптинг, подделка межсайтовых запросов и
кликджекинг
9. Масштабируемый
** Django использует компонентную “shared-nothing”
архитектуру (каждая часть архитектуры не зависит от
других, и следовательно, может быть заменена или
изменена при необходимости). Четкое разделение
между различными частями означает, что оно может
масштабироваться для увеличения трафика путем
добавления оборудования на любом уровне:
кеширующие серверы, серверы баз данных или
серверы приложений. Некоторые из самых
посещаемых сайтов успешно масштабируются Django
для удовлетворения своих требований (например,
Instagram и Disqus).
10. Удобный в сопровождении
** Код Django написан с использованием принципов и
шаблонов дизайна, которые поощряют создание
поддерживаемого и многоразового кода. В частности,
он использует принцип Do not Repeat Yourself (DRY),
поэтому нет ненужного дублирования, что уменьшает
количество кода.
* Django также способствует группировке связанных
функций в многоразовые «приложения» и на более
низком уровне группирует связанный код модулей в
соответствии с Model View Controller (MVC) паттерном.
11. Переносной
** Django написан на Python, который работает на многих
платформах. Это означает, что вы не привязаны к
какой-либо конкретной серверной платформе и
можете запускать приложения во многих вариантах
Linux, Windows и Mac OS X.
* Django хорошо поддерживается многими
поставщиками веб-хостинга, которые часто
предоставляют определенную инфраструктуру и
документацию для размещения сайтов Django.
12. Резюме
** Жесткая структура приложения
* Поддержка MVC
* Админ-панель
* Встроенный ORM
(ORM (англ. Object-Relational Mapping, рус. объектно-реляционное
отображение, или преобразование) — технология программирования,
которая связывает базы данных с концепциями объектно-ориентированных
языков программирования, создавая «виртуальную объектную
базу данных». )
* Высокая скорость работы
13. Как работает web
** В традиционном информационном веб-сайте, веб-
приложение ожидает запросов HTTP от веб-браузера
(или другого клиента). Когда запрос получен,
приложение разрабатывает то, что необходимо на
основе URL-адреса и, возможно, информации в POST
или в GET запросах. В зависимости от того, что
требуется, он может читать или записывать
информацию из базы данных или выполнять другие
задачи, необходимые для удовлетворения запроса.
Приложение затем вернет ответ веб-браузеру, часто
динамически создавая страницу HTML для
отображения браузера, вставляя полученные данные в
HTML шаблон.
14. Как работает Django
** Зелёным отмечены
блоки, которые
пишет разработчик.
Всё остальное — это
готовые
компоненты Django.
15. Как работает Django
** Веб-сервер получает HTTP-запрос от посетителя. Django не содержит полноценного веб-
сервера и предполагается, что будет задействована какая-то программа-веб-сервер или
WSGI-сервер (Apache, nginx, LightHTTPd, Caddy, uWSGI и так далее).
* Веб-сервер передаёт запрос Django через точку входа.
* Django создаёт объект HTTPRequest и пропускает его через цепочку Middleware.
* Django просматривает urlconf и ищет представление, которое способно обработать запрос.
Если его нет, возвращается ошибка HTTP 404 Not Found.
* Django запускает найденное представление, передавая ему Request и параметры из
адреса.
* Представление взаимодействует с хранилищем данных (через модели), выполняет какието (любые) действия, читает/записывает файлы, и вообще делает то, для чего
предназначено. В результате представление должно сформировать HTTP-ответ. Очень
часто для этого применяются шаблоны HTML-файлов, чтобы не создавать веб-страницу с
нуля, а использовать готовые фрагменты.
* Django пропускает созданный представлением ответ через цепочку Middleware.
* Ответ отдаётся веб-серверу, а тот, в свою очередь, передаёт ответ посетителю
* Связу́ющее програ́ммное обеспе́чение (англ. middleware; также переводится
как промежу́точное программное обеспечение, программное обеспечение среднего
слоя, подпрогра́ммное обеспечение, межплатфо́рменное программное обеспечение) —
широко используемый термин, означающий слой или комплекс
технологического программного обеспечения для обеспечения взаимодействия между
различными приложениями, системами, компонентами.
16. Схема файлов
** Веб-приложения написанные на Django обычно
группируют код, который обрабатывает каждый из
этих шагов, в отдельные файлы:
17. urls.py
** URLs: Хотя можно обрабатывать запросы с каждого
URL-адреса с помощью одной функции, гораздо
удобнее писать отдельную функцию для обработки
каждого ресурса. URL-mapper используется для
перенаправления HTTP-запросов в соответствующее
представление на основе URL-адреса запроса. URLmapper также может извлекать данные из URL-адреса
в соответствии с заданным шаблоном и передавать их
в соответствующую функцию в виде аргументов.
18. urls.py
** Сопоставитель URL-адресов обычно хранится в
файле urls.py.
urlpatterns = [
url(r'^$', views.index),
url(r'^([0-9]+)/$', views.best),
]
* (urlpatterns) определяет список соответствия между
определенными URL-шаблонами и соотвествующими
функциями отображения (view). Если полученный
HTTP запрос подходит под определенный шаблон (
такой как r'^$'), то будет вызвана ассоциированная
функция отображения (такая как views.index) и
передана в запрос.
19. views.py
** View: Представление (view) - это функция обработчика
запросов, которая получает HTTP-запросы и
возвращает ответы. View имеет доступ к данным через
модели (необходимым для удовлетворения запросов и
делегирования ответа в шаблоны).
* Отображения (views) - это сердце веб-приложения,
получающие HTTP запросы от веб-клиентов и
возвращающие HTTP ответы. Между тем, они
организовывают другие ресурсы фреймворка для
доступа к базам данных, генерации шаблонов и т.д.
20. views.py
*## filename: views.py (Django view functions)
from django.http import HttpResponse
def index(request):
return HttpResponse('Hello from Django!')
* Cопоставитель URL-адресов из предыдущего раздела
вызывает функцию index(). Как и другие функции
отображения, она получает объект HttpRequest как
параметр (request) и вовращает HttpResponse объект. В
этом случае мы не делаем ничего с запросом и наш
ответ просто возвращает строго заданную строку.
21. models.py
** Models: Модели представляют собой объекты Python,
которые определяют структуру данных приложения и
предоставляют механизмы для управления
(добавления, изменения, удаления) и выполнения
запросов в базу данных.
22. models.py
** Веб-приложения Django обрабатывают и запрашивают
данные через объекты Python, называемые
моделями. Модели определяют структуру хранимых
данных, включая типы полей и, возможно, их
максимальный размер, значения по умолчанию,
параметры списка выбора, текст справки для
документации, текст меток для форм и т. д.
* Определение модели не зависит от СУБД (MySQL или
PostgreSQL) - ваши модели будут работать в любой из
них. После того, как вы выбрали базу данных, которую
хотите использовать, Вам не нужно напрямую
обращаться к ней - вы просто пишете свою структуру
модели и другой код, а Django обрабатывает всю
грязную работу по обращению к базе данных за вас.
23. models.py
*# filename: models.py
from django.db import models
class Team(models.Model):
team_name = models.CharField(max_length=40)
TEAM_LEVELS = (
('U09', 'Under 09s'),
('U10', 'Under 10s'),
('U11', 'Under 11s'),
... #list other team levels
)
team_level=models.CharField(max_length=3,choices=TEAM_L
EVELS,default='U11')
24. models.py
** В приведенном фрагменте кода показана очень
простая модель Django для объекта Team .
* Team класс наследуется от класса models.Model. Он
определяет имя команды и командный уровень в
качестве полей символов и задает максимальное
количество символов, которые должны быть
сохранены для каждой записи.
* Team_level может быть одним из нескольких значений,
поэтому мы определяем его как поле выбора и
предоставляем сопоставление между отображаемыми
вариантами и хранимыми данными вместе со
значением по умолчанию.
25. Запрос данных (views.py)
** Модель Django предоставляет простой API запросов для
поиска в базе данных. Поиск может осуществляться по
нескольким полям одновременно с использованием
разных критериев (таких как exact, case-insensitive,
greater than и т.д.), и может поддерживать сложные
выражения (например, вы можете указать поиск в
командах U11, у которых есть имя команды,
начинающееся с «Fr» или заканчивается на «al»).
26. Запрос данных (views.py)
*## filename: views.py
from django.shortcuts import render
from .models import Team
def index(request):
list_teams = Team.objects.filter(team_level__exact="U09")
context = {'youngest_teams': list_teams}
return render(request, '/best/index.html', context)
27. Запрос данных (views.py)
** Фрагмент кода показывает функцию view (обработчик
ресурсов) для отображения всех команд U09. Жирная линия
показывет как мы можем использовать модель API запросов
для того, чтобы отфильтровать все записи где
поле team_level в точности содержит текст 'U09' (обратите
внимание, как эти критерии передаются функции filter() в
качестве аргумента с именем поля и типом соответствия,
разделенным двойным
подчеркиванием: team_level__exact).
* Данная функция использует функцию render() для того,
чтобы создать HttpResponse, который будет отправлен назад
браузеру. Эта функция является ярлыком; она создает
HTML-файл, комбинируя указанный шаблон HTML и
некоторые данные для вставки в шаблон (предоставляется в
переменной с именем "context").
28. <filename>.html
** Templates: Template (шаблон) - это текстовый файл
определяющий структуру или разметку страницы
(например HTML страницы), с полями для подстановки
используемыми для представления актуального
содержимого. View может динамически создавать
HTML страницы, используя HTML шаблоны и заполняя
их данными из модели (model). Шаблон может быть
использован для определения структуры файлов
любых типов, не обязательно HTML.
29. HTML templates
** Системы шаблонов позволяют указать структуру
выходного документа, используя заполнители для
данных, которые будут заполнены при создании
страницы. Шаблоны часто используются для создания
HTML, но также могут создавать другие типы
документов. Django поддерживает как собственную
систему шаблонов, так и другую популярную
библиотеку Python под названием Jinja2 (она также
может быть использована для поддержки других
систем, если это необходимо).
30. HTML templates
*## filename: best/templates/best/index.html
<!DOCTYPE html>
<html lang="en">
<body>
{% if youngest_teams %}
<ul>
{% for team in youngest_teams %}
<li>{{ team.team_name }}</li>
{% endfor %}
</ul>
{% else %}
<p>No teams are available.</p>
{% endif %}
</body>
</html>
31. HTML templates
** Фрагмент кода показывает, как выглядит HTML-
шаблон, вызванный функцией render() из
предыдущего примера. Этот шаблон был написан в
предположении, что во время рендеринга он будет
иметь доступ к переменной списка,
называемой youngest_teams (содержащейся в
контекстной переменной внутри
функции render() выше). Внутри скелета HTML мы
имеем выражение, которое сначала проверяет,
существует ли переменная youngest_teams, а затем
выполняет итерацию в цикле for. На каждой итерации
шаблон отображает значение team_name каждой
команды в элементе <li>.
32. Дополнительные функции
** Формы: HTML-формы используются для сбора пользовательских данных для
обработки на сервере. Django упрощает создание, проверку и обработку формы.
* Аутентификация пользователя и разрешения: Django включает надежную
систему аутентификации и авторизации пользователей, которая была построена
с учетом безопасности.
* Кэширование: Создание динамического контента намного более интенсивно (и
медленнее), чем обслуживание статического содержимого. Django обеспечивает
гибкое кэширование, чтобы вы могли хранить всю или часть отображаемой
страницы, для того, чтобы она не вызывалась повторно, за исключением
случаев, когда это необходимо.
* Админ-панель: Административная панель в Django включена по умолчанию при
создании приложения с использованием основного каркаса. Это упрощает
управление админкой администраторам сайта для создания, редактирования и
просмотра любых данных на вашем сайте.
* Сериализация данных: Django упрощает сериализацию и обслуживание ваших
данных в таких форматах как XML или JSON. Это может быть полезно при
создании веб-сервисов (веб-сайтов, которые исключительно служат для
использования данных другими приложениями или сайтами и сами ничего не
отображают) или при создании веб-сайта, на котором клиентский код
обрабатывает весь рендеринг данных.
33. Установка Django
** Уствновить pip https://pip.pypa.io/en/latest/installing/
или https://www.python.org/downloads/
* Установить виртуальное окружение (pip install
virtualenv)
* Создать виртуальное окружение (python –m venv
имя_виртуального_окружения)
* Установить в виртуальное окружение Django (pip install
django)
* Создать проект (django-admin startproject
название_проекта)
* Запуск сервера Django (python manage.py runserver
port) (default port = 8000)
34. Django REST Framework
*35. Полезные ссылки
** Видеоуроки
https://www.youtube.com/watch?v=QPr-XqWljBg
https://www.youtube.com/watch?v=F5mRW0jo-U4
https://www.youtube.com/watch?v=w4nrT7emiVc
* Документация
https://docs.djangoproject.com/en/3.0/
https://tutorial.djangogirls.org/ru/django/
https://developer.mozilla.org/en-US/docs/Learn/Serverside/Django
programming