SlideShare uma empresa Scribd logo
1 de 29
Baixar para ler offline
Web
приложения
Основные типы запросов
•   Запросы статических документов
•   Запросы динамических документов
•   Отправка данных форм
•   AJAX - запросы
•   Запросы к API сайта
•   Персистентные соединения
2
Основные задачи
•   Маршрутизация URL
•   Парсинг заголовков и параметров запроса
•   Хранение состояния (сессии) пользователя
•   Выполнение бизнес-логики
•   Работа с базами данных
•   Генерация HTML страницы или JSON ответа
3
MVC
5
Роли компонентов MVC
•   Router - выбор конкретного controller по URL
•   Model - реализация бизнес-логики приложения
•   Controller - работа с HTTP, связь controller и view
•   View - генерация HTML или другого представления
6
7
Плюсы фреймворков
➕ Готовая архитектура
➕ Повторное использование кода
➕ Экономия ресурсов
➕ Участие в Open Source
➕ Проще найти программистов
➕ Проще обучать программистов
8
Django
Соглашение о именовании
MVC Django
Model Model
Router urls.py
Controller views
View templates
10
Структура проекта
django-admin startproject project - создание проекта.
project
├── crm
│ ├── models.py
│ ├── urls.py
│ └── views.py
├── manage.py
└── project
├── settings.py
├── urls.py
└── wsgi.py
11
Основные файлы проекта
•   manage.py - скрипт управления проектом
•   project/settings.py - настройки
•   project/urls.py - router, список URL проекта
•   project/wsgi.py - WSGI приложение, точка входа
•   crm - Django - приложение
12
Структура не-open-source проекта
anyname
├── project
│ ├── crm
│ ├── blog
│ ├── manage.py
│ └── project
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── templates
└── static
13
Django
приложения
Django приложения
Приложения - способ распространения кода в Django
инфраструктуре. В случае, если вы не планируете публиковать ваш
код, приложения - это просто способ логической организации кода.
./manage.py startapp crm - создание нового приложения с
именем crm . Нужно вызывать из директории проекта.
15
Структура приложения
├── templates
├── static
├── templatetags
├── management
│ └── commands
├── migrations
├── models.py
├── tests.py
├── urls.py
└── views.py
16
Основные файлы приложения
•   models.py - файл с моделями, бизнес-логика
•   views.py - контроллеры
•   urls.py - URL роутер данного приложения
•   templates - директория с шаблонами
•   management/commands - консольные команды приложения
•   static - CSS, JavaScript, картинки
•   migrations - миграции для обновления базы данных
17
Конфигурация
Django
Конфиг - просто python модуль
# project/project/settings.py
ROOT_URLCONF = 'project.urls'
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
TEMPLATE_DIRS = (
BASE_DIR + '/templates',
)
19
Пути в конфиге
Проблемы:
•   Проект может быть развернут в любой директории
•   Несколько копий проекта на одном сервере
Решения:
•   Абсолютные пути в каждом конфиге
•   Переменные окружения, $PROJECT_PATH
•   Относительные пути
20
Относительные пути
import os.path
BASE_DIR = os.path.abspath(__file__)
BASE_DIR = os.path.dirname(BASE_DIR)
BASE_DIR = os.path.dirname(BASE_DIR)
TEMPLATE_DIRS = (
BASE_DIR + '/templates',
)
STATIC_ROOT = BASE_DIR + '/static'
21
Паттерн local_settings.py
# в конце project/settings.py
try:
from ask_pupkin.local_settings import *
except ImportError:
pass
22
Маршрутизация
URL
Порядок поиска контроллера
•   Django начинает поиск с файла ROOT_URLCONF из настроек
•   Загрузив файл, Django использует переменную urlpatterns
•   Django проходит по всем паттернам до первого совпадения
•   Если совпадения не найдено - будет возвращен код
404 Not Found
24
Маршрутизация в проекте
# project/project/urls.py
urlpatterns = [
url(r'^$', 'blog.views.home', name='home'),
url(r'^', include('blog.urls')),
url(r'^admin/', include('admin.site.urls')),
]
25
Маршрутизация в приложении
# project/blog/urls.py
from blog.views import post_list
urlpatterns = patterns('blog.views',
url(r'^$', post_list, name='post-list'),
url(r'^category/(d+)/$', 'category_view',
name='post-list-by-category'),
url(r'^(?P<pk>d+)/$', 'post_detail',
name='post-detail'),
)
26
Используемые функции
•   url - для передачи именованных параметров
•   patterns - для добавления префикса к именам
•   include - включение одного urls.py внутрь другого
27
Особенности маршрутизации в
Django
•   Слеш ( / ) в начале роутов не указывается
•   Можно указывать как имя, так и саму view-функцию
•   Роуты описываются с помощью регулярных выражений
•   Можно и нужно разносить роуты по приложениям
•   Можно и нужно создавать именованные роуты
•   Одно действие – один роут – один контроллер
28
Reverse routing
В python коде:
from django.core.urlresolvers import reverse
reverse('home')
reverse('category-view', args=(10,))
reverse('post-detail', kwargs={'pk': 7})
В шаблоне:
{% url 'question-view' question.id %}
29

Mais conteúdo relacionado

Mais procurados

Загрузка, обработка, хранение и отдача статики
Загрузка, обработка, хранение и отдача статикиЗагрузка, обработка, хранение и отдача статики
Загрузка, обработка, хранение и отдача статики
Kirill Mokevnin
 
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИСTARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
2ГИС Технологии
 
Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...
Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...
Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...
zfconfua
 
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
7bits
 
Web осень 2013 лекция 3
Web осень 2013 лекция 3Web осень 2013 лекция 3
Web осень 2013 лекция 3
Technopark
 
Knockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-ОнлайнKnockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-Онлайн
2ГИС Технологии
 
Стажировка-2015. Разработка. Занятие 3. Серверные Java-приложения
Стажировка-2015. Разработка. Занятие 3. Серверные Java-приложенияСтажировка-2015. Разработка. Занятие 3. Серверные Java-приложения
Стажировка-2015. Разработка. Занятие 3. Серверные Java-приложения
7bits
 
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
2ГИС Технологии
 
Web осень 2013 лекция 1
Web осень 2013 лекция 1Web осень 2013 лекция 1
Web осень 2013 лекция 1
Technopark
 

Mais procurados (20)

Загрузка, обработка, хранение и отдача статики
Загрузка, обработка, хранение и отдача статикиЗагрузка, обработка, хранение и отдача статики
Загрузка, обработка, хранение и отдача статики
 
Chef
ChefChef
Chef
 
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИСTARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
 
Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...
Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...
Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...
 
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
 
Ice Php Framework Preview Release
Ice Php Framework Preview ReleaseIce Php Framework Preview Release
Ice Php Framework Preview Release
 
Изоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьИзоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесь
 
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
 
Impress Application Server for node.js (ru)
Impress Application Server for node.js (ru)Impress Application Server for node.js (ru)
Impress Application Server for node.js (ru)
 
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
 
Web осень 2013 лекция 3
Web осень 2013 лекция 3Web осень 2013 лекция 3
Web осень 2013 лекция 3
 
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
 
«Композитный сайт. Ускорение отдачи сайта в 100 раз»
«Композитный сайт. Ускорение отдачи сайта в 100 раз» «Композитный сайт. Ускорение отдачи сайта в 100 раз»
«Композитный сайт. Ускорение отдачи сайта в 100 раз»
 
Knockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-ОнлайнKnockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-Онлайн
 
Стажировка-2015. Разработка. Занятие 3. Серверные Java-приложения
Стажировка-2015. Разработка. Занятие 3. Серверные Java-приложенияСтажировка-2015. Разработка. Занятие 3. Серверные Java-приложения
Стажировка-2015. Разработка. Занятие 3. Серверные Java-приложения
 
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
 
Web осень 2013 лекция 1
Web осень 2013 лекция 1Web осень 2013 лекция 1
Web осень 2013 лекция 1
 
07 virtual hosts_ru
07 virtual hosts_ru07 virtual hosts_ru
07 virtual hosts_ru
 
Pagination MongoDb
Pagination MongoDbPagination MongoDb
Pagination MongoDb
 
03 web server_architecture_ru
03 web server_architecture_ru03 web server_architecture_ru
03 web server_architecture_ru
 

Destaque

AWS и GCP: трудная жизнь в облаках / Максим Пугачев (IPONWEB)
AWS и GCP: трудная жизнь в облаках / Максим Пугачев (IPONWEB)AWS и GCP: трудная жизнь в облаках / Максим Пугачев (IPONWEB)
AWS и GCP: трудная жизнь в облаках / Максим Пугачев (IPONWEB)
Ontico
 

Destaque (14)

11 - Web-технологии. Работа с СУБД
11 - Web-технологии. Работа с СУБД11 - Web-технологии. Работа с СУБД
11 - Web-технологии. Работа с СУБД
 
12 - Web-технологии. Django модели
12 - Web-технологии. Django модели12 - Web-технологии. Django модели
12 - Web-технологии. Django модели
 
16 - Web-технологии. Технология AJAX
16 - Web-технологии. Технология AJAX16 - Web-технологии. Технология AJAX
16 - Web-технологии. Технология AJAX
 
14 - Web-технологии. Обработка форм
14 - Web-технологии. Обработка форм14 - Web-технологии. Обработка форм
14 - Web-технологии. Обработка форм
 
13 - Web-технологии. Отображение данных
13 - Web-технологии. Отображение данных13 - Web-технологии. Отображение данных
13 - Web-технологии. Отображение данных
 
03 - Установка Xcode
03 - Установка Xcode03 - Установка Xcode
03 - Установка Xcode
 
10 - Web-технологии. MVC фреймворки (продолжение)
10 - Web-технологии. MVC фреймворки (продолжение)10 - Web-технологии. MVC фреймворки (продолжение)
10 - Web-технологии. MVC фреймворки (продолжение)
 
01 - Системные требования
01 - Системные требования01 - Системные требования
01 - Системные требования
 
02 - Установка macOS
02 - Установка macOS02 - Установка macOS
02 - Установка macOS
 
04 - Практика UML. Описание прецедентов
04 - Практика UML. Описание прецедентов04 - Практика UML. Описание прецедентов
04 - Практика UML. Описание прецедентов
 
Практический анализ и визуальное моделирование на UML
Практический анализ и визуальное моделирование на UMLПрактический анализ и визуальное моделирование на UML
Практический анализ и визуальное моделирование на UML
 
66 - Spring. Spring и JSF
66 - Spring. Spring и JSF66 - Spring. Spring и JSF
66 - Spring. Spring и JSF
 
05 - Web-технологии. Сетевые протоколы
05 - Web-технологии. Сетевые протоколы05 - Web-технологии. Сетевые протоколы
05 - Web-технологии. Сетевые протоколы
 
AWS и GCP: трудная жизнь в облаках / Максим Пугачев (IPONWEB)
AWS и GCP: трудная жизнь в облаках / Максим Пугачев (IPONWEB)AWS и GCP: трудная жизнь в облаках / Максим Пугачев (IPONWEB)
AWS и GCP: трудная жизнь в облаках / Максим Пугачев (IPONWEB)
 

Semelhante a 09 - Web-технологии. MVC фреймворки

Многофункциональный сервер приложений, обеспечивающий среду запуска, и дающий...
Многофункциональный сервер приложений, обеспечивающий среду запуска, и дающий...Многофункциональный сервер приложений, обеспечивающий среду запуска, и дающий...
Многофункциональный сервер приложений, обеспечивающий среду запуска, и дающий...
GeeksLab Odessa
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизация
Yandex
 
Референсная архитектура приложения на ASP.NET MVC
Референсная архитектура приложения на ASP.NET MVCРеференсная архитектура приложения на ASP.NET MVC
Референсная архитектура приложения на ASP.NET MVC
Andrew Mayorov
 

Semelhante a 09 - Web-технологии. MVC фреймворки (20)

Разработка мобильного и веб интерфейса для Caché
Разработка мобильного и веб интерфейса для CachéРазработка мобильного и веб интерфейса для Caché
Разработка мобильного и веб интерфейса для Caché
 
Web and mobile development for intersystems caché, Eduard Lebedyuk
Web and mobile development for intersystems caché, Eduard LebedyukWeb and mobile development for intersystems caché, Eduard Lebedyuk
Web and mobile development for intersystems caché, Eduard Lebedyuk
 
ASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVCASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVC
 
Лекция #6. Введение в Django web-framework
Лекция #6. Введение в Django web-frameworkЛекция #6. Введение в Django web-framework
Лекция #6. Введение в Django web-framework
 
C# Web. Занятие 01.
C# Web. Занятие 01.C# Web. Занятие 01.
C# Web. Занятие 01.
 
Корпоративное приложение на Rails
Корпоративное приложение на RailsКорпоративное приложение на Rails
Корпоративное приложение на Rails
 
Многофункциональный сервер приложений, обеспечивающий среду запуска, и дающий...
Многофункциональный сервер приложений, обеспечивающий среду запуска, и дающий...Многофункциональный сервер приложений, обеспечивающий среду запуска, и дающий...
Многофункциональный сервер приложений, обеспечивающий среду запуска, и дающий...
 
Стандарты и соглашения в сложных ООП-приложениях
Стандарты и соглашения в сложных ООП-приложенияхСтандарты и соглашения в сложных ООП-приложениях
Стандарты и соглашения в сложных ООП-приложениях
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизация
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизация
 
C# Web. Занятие 16.
C# Web. Занятие 16.C# Web. Занятие 16.
C# Web. Занятие 16.
 
Опыт работы с фреймворком ASP.NET MVC
Опыт работы с фреймворком ASP.NET MVCОпыт работы с фреймворком ASP.NET MVC
Опыт работы с фреймворком ASP.NET MVC
 
Решения сообщества для SharePoint
Решения сообщества для SharePointРешения сообщества для SharePoint
Решения сообщества для SharePoint
 
The Old New ASP.NET
The Old New ASP.NETThe Old New ASP.NET
The Old New ASP.NET
 
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
 
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
Basis.js - почему я не бросил разрабатывать свой фреймворк (extended)
 
FrontTalks: Роман Дворнов (Ostrovok.ru), «Basis.js: почему я не бросил разраб...
FrontTalks: Роман Дворнов (Ostrovok.ru), «Basis.js: почему я не бросил разраб...FrontTalks: Роман Дворнов (Ostrovok.ru), «Basis.js: почему я не бросил разраб...
FrontTalks: Роман Дворнов (Ostrovok.ru), «Basis.js: почему я не бросил разраб...
 
Референсная архитектура приложения на ASP.NET MVC
Референсная архитектура приложения на ASP.NET MVCРеференсная архитектура приложения на ASP.NET MVC
Референсная архитектура приложения на ASP.NET MVC
 
Анна Якубенко, Татьяна Лебедева - SAP ERP в качестве backend для HTML5 прилож...
Анна Якубенко, Татьяна Лебедева - SAP ERP в качестве backend для HTML5 прилож...Анна Якубенко, Татьяна Лебедева - SAP ERP в качестве backend для HTML5 прилож...
Анна Якубенко, Татьяна Лебедева - SAP ERP в качестве backend для HTML5 прилож...
 
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемыMoscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
 

Mais de Roman Brovko

Bare metal training_06_I2C
Bare metal training_06_I2CBare metal training_06_I2C
Bare metal training_06_I2C
Roman Brovko
 
Bare metal training_05_uart
Bare metal training_05_uartBare metal training_05_uart
Bare metal training_05_uart
Roman Brovko
 
подготовка рабочего окружения
подготовка рабочего окруженияподготовка рабочего окружения
подготовка рабочего окружения
Roman Brovko
 

Mais de Roman Brovko (20)

Individual task Networking
Individual task NetworkingIndividual task Networking
Individual task Networking
 
Networking essentials lect3
Networking essentials lect3Networking essentials lect3
Networking essentials lect3
 
Gl embedded starterkit_ethernet
Gl embedded starterkit_ethernetGl embedded starterkit_ethernet
Gl embedded starterkit_ethernet
 
Networking essentials lect2
Networking essentials lect2Networking essentials lect2
Networking essentials lect2
 
Networking essentials lect1
Networking essentials lect1Networking essentials lect1
Networking essentials lect1
 
Bare metal training_07_spi_flash
Bare metal training_07_spi_flashBare metal training_07_spi_flash
Bare metal training_07_spi_flash
 
Bare metal training_06_I2C
Bare metal training_06_I2CBare metal training_06_I2C
Bare metal training_06_I2C
 
Glesk worshop
Glesk worshopGlesk worshop
Glesk worshop
 
Bare metal training_05_uart
Bare metal training_05_uartBare metal training_05_uart
Bare metal training_05_uart
 
Bare metal training_04_adc_temp_sensor
Bare metal training_04_adc_temp_sensorBare metal training_04_adc_temp_sensor
Bare metal training_04_adc_temp_sensor
 
Bare metal training_03_timers_pwm
Bare metal training_03_timers_pwmBare metal training_03_timers_pwm
Bare metal training_03_timers_pwm
 
Bare metal training_02_le_ds_and_buttons
Bare metal training_02_le_ds_and_buttonsBare metal training_02_le_ds_and_buttons
Bare metal training_02_le_ds_and_buttons
 
Bare metal training_01_hello_world
Bare metal training_01_hello_worldBare metal training_01_hello_world
Bare metal training_01_hello_world
 
Bare metal training_00_prerequisites
Bare metal training_00_prerequisitesBare metal training_00_prerequisites
Bare metal training_00_prerequisites
 
C language lect_23_advanced
C language lect_23_advancedC language lect_23_advanced
C language lect_23_advanced
 
C language lect_22_advanced
C language lect_22_advancedC language lect_22_advanced
C language lect_22_advanced
 
C language lect_21_advanced
C language lect_21_advancedC language lect_21_advanced
C language lect_21_advanced
 
подготовка рабочего окружения
подготовка рабочего окруженияподготовка рабочего окружения
подготовка рабочего окружения
 
C language lect_20_advanced
C language lect_20_advancedC language lect_20_advanced
C language lect_20_advanced
 
C language lect_19_basics
C language lect_19_basicsC language lect_19_basics
C language lect_19_basics
 

09 - Web-технологии. MVC фреймворки

  • 2. Основные типы запросов •   Запросы статических документов •   Запросы динамических документов •   Отправка данных форм •   AJAX - запросы •   Запросы к API сайта •   Персистентные соединения 2
  • 3. Основные задачи •   Маршрутизация URL •   Парсинг заголовков и параметров запроса •   Хранение состояния (сессии) пользователя •   Выполнение бизнес-логики •   Работа с базами данных •   Генерация HTML страницы или JSON ответа 3
  • 4. MVC
  • 5. 5
  • 6. Роли компонентов MVC •   Router - выбор конкретного controller по URL •   Model - реализация бизнес-логики приложения •   Controller - работа с HTTP, связь controller и view •   View - генерация HTML или другого представления 6
  • 7. 7
  • 8. Плюсы фреймворков ➕ Готовая архитектура ➕ Повторное использование кода ➕ Экономия ресурсов ➕ Участие в Open Source ➕ Проще найти программистов ➕ Проще обучать программистов 8
  • 10. Соглашение о именовании MVC Django Model Model Router urls.py Controller views View templates 10
  • 11. Структура проекта django-admin startproject project - создание проекта. project ├── crm │ ├── models.py │ ├── urls.py │ └── views.py ├── manage.py └── project ├── settings.py ├── urls.py └── wsgi.py 11
  • 12. Основные файлы проекта •   manage.py - скрипт управления проектом •   project/settings.py - настройки •   project/urls.py - router, список URL проекта •   project/wsgi.py - WSGI приложение, точка входа •   crm - Django - приложение 12
  • 13. Структура не-open-source проекта anyname ├── project │ ├── crm │ ├── blog │ ├── manage.py │ └── project │ ├── settings.py │ ├── urls.py │ └── wsgi.py ├── templates └── static 13
  • 15. Django приложения Приложения - способ распространения кода в Django инфраструктуре. В случае, если вы не планируете публиковать ваш код, приложения - это просто способ логической организации кода. ./manage.py startapp crm - создание нового приложения с именем crm . Нужно вызывать из директории проекта. 15
  • 16. Структура приложения ├── templates ├── static ├── templatetags ├── management │ └── commands ├── migrations ├── models.py ├── tests.py ├── urls.py └── views.py 16
  • 17. Основные файлы приложения •   models.py - файл с моделями, бизнес-логика •   views.py - контроллеры •   urls.py - URL роутер данного приложения •   templates - директория с шаблонами •   management/commands - консольные команды приложения •   static - CSS, JavaScript, картинки •   migrations - миграции для обновления базы данных 17
  • 19. Конфиг - просто python модуль # project/project/settings.py ROOT_URLCONF = 'project.urls' DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } } TEMPLATE_DIRS = ( BASE_DIR + '/templates', ) 19
  • 20. Пути в конфиге Проблемы: •   Проект может быть развернут в любой директории •   Несколько копий проекта на одном сервере Решения: •   Абсолютные пути в каждом конфиге •   Переменные окружения, $PROJECT_PATH •   Относительные пути 20
  • 21. Относительные пути import os.path BASE_DIR = os.path.abspath(__file__) BASE_DIR = os.path.dirname(BASE_DIR) BASE_DIR = os.path.dirname(BASE_DIR) TEMPLATE_DIRS = ( BASE_DIR + '/templates', ) STATIC_ROOT = BASE_DIR + '/static' 21
  • 22. Паттерн local_settings.py # в конце project/settings.py try: from ask_pupkin.local_settings import * except ImportError: pass 22
  • 24. Порядок поиска контроллера •   Django начинает поиск с файла ROOT_URLCONF из настроек •   Загрузив файл, Django использует переменную urlpatterns •   Django проходит по всем паттернам до первого совпадения •   Если совпадения не найдено - будет возвращен код 404 Not Found 24
  • 25. Маршрутизация в проекте # project/project/urls.py urlpatterns = [ url(r'^$', 'blog.views.home', name='home'), url(r'^', include('blog.urls')), url(r'^admin/', include('admin.site.urls')), ] 25
  • 26. Маршрутизация в приложении # project/blog/urls.py from blog.views import post_list urlpatterns = patterns('blog.views', url(r'^$', post_list, name='post-list'), url(r'^category/(d+)/$', 'category_view', name='post-list-by-category'), url(r'^(?P<pk>d+)/$', 'post_detail', name='post-detail'), ) 26
  • 27. Используемые функции •   url - для передачи именованных параметров •   patterns - для добавления префикса к именам •   include - включение одного urls.py внутрь другого 27
  • 28. Особенности маршрутизации в Django •   Слеш ( / ) в начале роутов не указывается •   Можно указывать как имя, так и саму view-функцию •   Роуты описываются с помощью регулярных выражений •   Можно и нужно разносить роуты по приложениям •   Можно и нужно создавать именованные роуты •   Одно действие – один роут – один контроллер 28
  • 29. Reverse routing В python коде: from django.core.urlresolvers import reverse reverse('home') reverse('category-view', args=(10,)) reverse('post-detail', kwargs={'pk': 7}) В шаблоне: {% url 'question-view' question.id %} 29