SlideShare a Scribd company logo
Django Шахрай М.С. 4 курс 2009-2010
Создатели Адриан Головатый ( Adrian Holovaty ), Саймон Виллисон ( Simon Willison ), Джекоб Каплан-Мосс ( Jacob Kaplan-Moss ), Вилсон Майнер ( Wilson Miner )
История Создатели: Эдриан Холовати (Adrian Holovaty) и Симон Виллисон Работали над созданием нескольких новостных сайтов для  World Online Жесткие требования к времени разработки сайта Надо разрабатывать похожую функциональность Исходя из своих потребностей создали новый фреймворк 2005 год – библиотека становится открытой Джанго Рейнхардт в среде джазменов известный также под прозвищем «Великий Джа́нго» — джазмен-гитарист, один из основателей уникального стиля в гитарном джазе под названием «джаз-мануш», или «цыганский джаз».
Установка
Установка (1 /2) Установка  Python Ядро среды Django работает с любыми версиями Python в диапазоне от 2.3 до 2.6 включительно.  Python 3.0  пока не поддерживается. Установка официального релиза  Django  (из репозитория) или самой новой версии – из транка
Установка ( 2/2) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Краткий обзор возможностей
Основные возможности ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],i18n Apps HTTP ORM Caching Admin Templates …
Возможности обработки  URL
Возможности обработки  URL Blogs Articles News На сайте несколько разделов Разные страницы  HTML  генерируются по разному HTTP  запрос Blogs Articles News URL  обработчик HTML  страница
Возможности обработки  URL В  Django  для выбора обработчика запроса применяются регулярные выражения. Рассмотрим пример: from  django.conf.urls.defaults  import  * from  mysite.views  import  hello urlpatterns = patterns('', ('^hello/$', hello), … ) В данном случае  http  запрос на адрес  http://mysite.ru/hello/   будет обрабатываться функцией  hello
Возможности обработки  URL Одна из приятных возможностей – выделение части  URL  как параметра и передачи ее в функцию - обработчик. (r'^time/plus/{1,2}/$', hours_ahead),  -  для запроса  http://mysite.ru /time/plus/2   число 2 будет передано в функцию – обработчик  hours_ahead   в качестве второго параметра
MTV model – template - view
Классическая модель  MVC В создании сайтов часто используется архитектура  MVC (model-view-controller). Модель  (model)   – инкапсулирует в себе всю работу с данными, в т.ч. работу с источниками данных (БД). Представление ( view)  –  отвечает за отображение информации (пользовательский интерфейс). Контроллер ( controller)  –  интерпретирует запросы, введенные пользователем, получает необходимые данные из модели и выводит их представление.
MTV ? В  Django  используется архитектура  MTV  (model-template-view). Модель ( model)  –  классы для работы с предметной логикой ( ORM) Шаблоны ( template)  –  формат генерации  html  страниц (и не только) по выбранным данным Представление  (view)  –  обработка запросов пользователей, выборка данных из Модели и передачи их на генерацию в нужный Шаблон View Controller Template View Model Model MTV MVC
Представление  (view)
Простейший пример ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Шаблоны ( templates)
Зачем нужны шаблоны? HTML страницы Код на  Python HTML страницы дизайнер программист Формат данных
Шаблоны  Django Шаблон  Django –  это строка специального формата, предназначенная для разделения документа от его данных. Шаблон используется для генерации  html  страниц и представляет собой обычный  html  документ с обозначенными местами подстановки значений переменных и различными видами основной логики (шаблонные теги).
<html> <head><title>Ordering notice</title></head> <body> <h1>Ordering notice</h1> <p>Dear  {{ person_name }} ,</p> <p>Thanks for placing an order from  {{ company }} . It's scheduled to ship on  {{ ship_date|date:&quot;F j, Y&quot; }} .</p> <p>Here are the items you've ordered:</p> <ul> {%  for  item  in  item_list %} <li> {{ item }} </li> {%  endfor  %} </ul> {%  if  ordered_warranty %} <p>Your warranty information will be included in the packaging.</p> {%  else  %} <p>You didn't order a warranty, so you're on your own when the products inevitably stop working.</p> {%  endif  %} <p>Sincerely,<br /> {{ company }} </p> </body> </html> подстановка значения переменной подстановка с применением фильтра обработка элементов списка if - else
Пример использования >>> from django import template >>> t = template.Template('My name is {{ name }}.') >>> c = template.Context({'name': 'Adrian'}) >>> print t.render(c) My name is Adrian. >>> c = template.Context({'name': 'Fred'}) >>> print t.render(c) My name is Fred.
Теги  (1/3) if / else {% if  today_is_weekend  %} <p>Welcome to the weekend!</p> {% endif %} {% if  today_is_weekend  %} <p>Welcome to the weekend!</p> {% else %} <p>Get back to work.</p> {% endif %} Тег  {% if %}  принимает  and ,  or  или  not  для тестирования множества переменных или инвертирования.
Теги  (2/3) f or Тег  {% for %}  позволяет обработать каждый элемент последовательности.  <ul> {% for  athlete  in  athlete_list  %} <li> {{ athlete.name }} </li> {% endfor %} </ul> Для обработки списка в обратном порядке надо добавить  reversed : {% for  athlete  in  athlete_list  reversed %}   ...   {% endfor %}
Теги  (3/3) f or  - empty {% for  athlete  in  athlete_list  %} <p> {{ athlete.name }} </p> {% empty %} <p>There are no athletes. Only computer programmers.</p> {% endfor %}
Другие теги Проверка эквивалентности {% ifequal  a_val b_val  %} Однострочный   комментарий {#  This is a comment  #}  Многострочный комментарий {% comment %} This is a multi-line comment. {% endcomment %}
Фильтры ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Философия и ограничения ,[object Object],[object Object],[object Object],[object Object]
Модели
ORM ,[object Object],[object Object],[object Object],[object Object],Программист Классы Схемы БД Программист Классы и  объекты
Как создать модель? Нисходящий метод Классы Связи Схемы БД Восходящий метод Классы Связи Схемы БД Связи Связи
Модели в  Django Для описания модели в  Django  надо написать класс, наследуемый от  models.Model  пакета  django.db. Поля в описываемом классе – объекты типов  models.CharField, models.URLField, models.EmailField  и т.п. Для класса автоматически создаются методы для манипуляции с объектами, операции автоматически отображаются в базу данных.  Рассмотрим пример:
from  django.db  import   models class  Publisher( models.Model ): name =  models.CharField (max_length=30) address =  models.CharField (max_length=50) city =  models.CharField (max_length=60) state_province =  models.CharField (max_length=30) country =  models.CharField (max_length=50) website =  models.URLField () class  Author( models.Model ): salutation =  models.CharField (max_length=10) first_name =  models.CharField (max_length=30) last_name =  models.CharField (max_length=40) email =  models.EmailField () headshot =  models.ImageField (upload_to='/tmp') class  Book( models.Model ): title =  models.CharField (max_length=100) authors =  models.ManyToManyField (Author) publisher =  models.ForeignKey (Publisher) publication_date =  models.DateField ()
Создание объектов модели Создадим объект  Publisher  и сохраним его в БД >>>  from   books.models   import   Publisher >>>  p1 = Publisher(name= 'Addison-Wesley' , address= '75 Arlington Street' , ...  city= 'Boston' , state_province= 'MA' , country= 'U.S.A.' , ...  website= 'http://www.apress.com/' ) >>>  p1.save() Можно короче: >>>  p1 = Publisher.objects.create(name= 'Apress' , ...  address= '2855 Telegraph Avenue' , ...  city= 'Berkeley' , state_province= 'CA' , country= 'U.S.A.' , ...  website= 'http://www.apress.com/' )
Строковое представление Изменим объект  Publisher : добавим метод  __unicode__(self). class  Publisher( models.Model ): name =  models.CharField (max_length=30) address =  models.CharField (max_length=50) city =  models.CharField (max_length=60) state_province =  models.CharField (max_length=30) country =  models.CharField (max_length=50) website =  models.URLField () def  __unicode__(self): return  self.name Метод __ unicode__  говорит системе как отображать данный объект в строковом представлении
Выборка объектов (1 /2) Отобразить все объекты: >>>  Publisher.objects.all() [<Publisher: Apress>, <Publisher: O'Reilly>]  Отобразить часть объектов(фильтр): >>>  Publisher.objects.filter(name= 'Apress' ) [<Publisher: Apress>]  >>>  Publisher.objects.filter(country= &quot;U.S.A.&quot; , state_province= &quot;CA&quot; ) [<Publisher: Apress>]  >>>  Publisher.objects.filter(name__contains= &quot;press&quot; ) [<Publisher: Apress>]  Получение одного объекта >>>  Publisher.objects.get(name= &quot;Apress&quot; ) <Publisher: Apress>
Выборка объектов ( 2/2) Сортировка объектов: >>>  Publisher.objects.order_by( &quot;name&quot; ) [<Publisher: Apress>, <Publisher: O'Reilly>]  Сортировка в обратном порядке: >>>  Publisher.objects.order_by( &quot;-name&quot; ) [<Publisher: O'Reilly>, <Publisher: Apress>]  Формирование цепочки запросов >>>  Publisher.objects.filter(country= &quot;U.S.A.&quot; ).order_by( &quot;-name&quot; ) [<Publisher: O'Reilly>, <Publisher: Apress>]  Ограничение выборки: >>>  Publisher.objects.order_by( 'name' )[0:2]
Удаление объектов >>>  p = Publisher.objects.get(name= &quot;O'Reilly&quot; ) >>>  p.delete() >>>  Publisher.objects.all() [<Publisher: Apress Publishing>]
Кэширование запросов
Зачем нужно кэширование? Схема без кэширования Схема с кэшированием HTTP запрос Обработка запроса Выборка данных Из БД Генерация HTML  страницы HTML  страница HTTP запрос HTML  страница КЭШ
Кэширование в  Django Memcached Кэширование в базу данных Кэширование на файловую систему Кэширование в оперативную память Dummy  кэширование
Иерархия кэширования Blogs Articles News Кэширование всего сайта Blogs Articles News Кэширование отдельного представления News Низкоуровневый  API
Интерфейс администратора
Интерфейс администратора в  Django Интерфейс администратора Наполнение сайта контентом Редактирование данных Разграничение прав доступа
 
 
 
Стандартная библиотека
Краткий обзор стандартной библиотеки ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Философия  Django
Философия  Django Средства, предоставляемые  Django Django Templates Django Models django.contrib Cheetah Mako ? SQL ? Свои классы
Спасибо за внимание!
Что почитать? http://www.djangoproject.com/  - официальный сайт проекта http://www.djangobook.com/  - туториал по работе с  Django http://djbook.ru/  -  русский перевод  Djangobook
Учебный пример
Примерная схема работы Поддержание сайта Разработка схем кэширования 5-10% Интеграция 5% Обработка форм 20-25% Разработка  views 25% Наполнение контентом (статьи, картинки, …) Настройка схем  url 5% Настройка интерфейса администратора в соответствии с нуждами проетка 5% Разработка шаблонов  (templates) Разработка классов ( model) 20% Разработка соглашений о необходимых данных для каждой страницы 5% Разработка структуры сайта ( URLs ) Выявление сущностей (классы) 5% Дизайнер Программист
Шаг  0 . Описание проекта ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Шаг 1. Создание нового проекта Создаем новый проект: django-admin.py startproject  MySuperProject Будет создана папка с названием  MySuperApplication  и следующим содержимым: Настройка  URL  (редактируется программистом) urls.py Здесь все настройки проекта, в частности настройки БД и подключаемые модули setting.py Управление проектом через специальные директивы, например  manage.py runserver  –  запустит тестовый сервер manage.py технический файл __ init__.py
Шаг  2 . Создание моделей Создаем приложение (каждый класс должен быть определен в каком-нибудь приложении, для возможности последующей переносимости): manage.py startapp  MyFirstApp Внутри проекта будет создана папка с названием  MyFirstApp  и следующим содержимым: Здесь надо описывать переносимые (?)  views , необходимость сомнительна views.py Здесь надо описывать свои тесты tests.py Предполагается, что классы будут описываться тут models.py технический файл __ init__.py
Шаг 3. Использование моделей ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Шаг 4. Подключение интерфейса администратора ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Шаг 5. Настройка отображения в интерфейсе администратора Добавляем в папку приложения файл  admin.py  с примерно следующим содержимым:
Шаг  6 . Разрабатываем  tempates  и  views Шаг  7 . Делаем обработчики форм Шаг 8. Заполняем контентом. Шаг 9. Приложение готово!

More Related Content

Similar to Django шахрай. версия 4

Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6
Technopark
 
django cheBit'11
django cheBit'11django cheBit'11
django cheBit'11
dva
 
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективноkranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
Krivoy Rog IT Community
 
ZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and DoctrineZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and Doctrine
ZFConf Conference
 
Web осень 2013 лекция 8
Web осень 2013 лекция 8Web осень 2013 лекция 8
Web осень 2013 лекция 8
Technopark
 
XForms новое поколение веб-форм
XForms новое поколение веб-формXForms новое поколение веб-форм
XForms новое поколение веб-форм
Alexander Anokhin
 
FPUG - t4t common
FPUG - t4t commonFPUG - t4t common
FPUG - t4t common
guest3dc074
 
Cтатический анализ кода (на примере DDD-фреймворка)
Cтатический анализ кода (на примере DDD-фреймворка)Cтатический анализ кода (на примере DDD-фреймворка)
Cтатический анализ кода (на примере DDD-фреймворка)
ngrebnev
 
View как чистая функция от состояния базы данных - Илья Беда, bro.agency
View как чистая функция от состояния базы данных  - Илья Беда, bro.agencyView как чистая функция от состояния базы данных  - Илья Беда, bro.agency
View как чистая функция от состояния базы данных - Илья Беда, bro.agency
it-people
 
Building corporate portals with liferay JEEConf 2011
Building corporate portals with liferay   JEEConf 2011Building corporate portals with liferay   JEEConf 2011
Building corporate portals with liferay JEEConf 2011
Alexey Kakunin
 
Web осень 2013 лекция 7
Web осень 2013 лекция 7Web осень 2013 лекция 7
Web осень 2013 лекция 7
Technopark
 
C++ осень 2012 лекция 9
C++ осень 2012 лекция 9C++ осень 2012 лекция 9
C++ осень 2012 лекция 9
Technopark
 

Similar to Django шахрай. версия 4 (20)

Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6
 
Django
DjangoDjango
Django
 
django cheBit'11
django cheBit'11django cheBit'11
django cheBit'11
 
Методики «Inversion of Control» и «Dependency Injection». Применение в Spring.
Методики «Inversion of Control» и «Dependency Injection». Применение в Spring.Методики «Inversion of Control» и «Dependency Injection». Применение в Spring.
Методики «Inversion of Control» и «Dependency Injection». Применение в Spring.
 
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективноkranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
 
ZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and DoctrineZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and Doctrine
 
The Best Portlet
The Best PortletThe Best Portlet
The Best Portlet
 
WordCamp Russia 2015: Фильтры и события в WordPress.
WordCamp Russia 2015: Фильтры и события в WordPress.WordCamp Russia 2015: Фильтры и события в WordPress.
WordCamp Russia 2015: Фильтры и события в WordPress.
 
C# Web. Занятие 16.
C# Web. Занятие 16.C# Web. Занятие 16.
C# Web. Занятие 16.
 
Web осень 2013 лекция 8
Web осень 2013 лекция 8Web осень 2013 лекция 8
Web осень 2013 лекция 8
 
Выступление Андрея Сумина, Mail.Ru Group, на High Performance Conference
Выступление Андрея Сумина, Mail.Ru Group, на High Performance ConferenceВыступление Андрея Сумина, Mail.Ru Group, на High Performance Conference
Выступление Андрея Сумина, Mail.Ru Group, на High Performance Conference
 
XForms новое поколение веб-форм
XForms новое поколение веб-формXForms новое поколение веб-форм
XForms новое поколение веб-форм
 
GraphQL API: Patterns | Андрей Чиж | Zlit Tech
GraphQL API: Patterns | Андрей Чиж | Zlit TechGraphQL API: Patterns | Андрей Чиж | Zlit Tech
GraphQL API: Patterns | Андрей Чиж | Zlit Tech
 
FPUG - t4t common
FPUG - t4t commonFPUG - t4t common
FPUG - t4t common
 
Cтатический анализ кода (на примере DDD-фреймворка)
Cтатический анализ кода (на примере DDD-фреймворка)Cтатический анализ кода (на примере DDD-фреймворка)
Cтатический анализ кода (на примере DDD-фреймворка)
 
View как чистая функция от состояния базы данных - Илья Беда, bro.agency
View как чистая функция от состояния базы данных  - Илья Беда, bro.agencyView как чистая функция от состояния базы данных  - Илья Беда, bro.agency
View как чистая функция от состояния базы данных - Илья Беда, bro.agency
 
Building corporate portals with liferay JEEConf 2011
Building corporate portals with liferay   JEEConf 2011Building corporate portals with liferay   JEEConf 2011
Building corporate portals with liferay JEEConf 2011
 
Web осень 2013 лекция 7
Web осень 2013 лекция 7Web осень 2013 лекция 7
Web осень 2013 лекция 7
 
C++ осень 2012 лекция 9
C++ осень 2012 лекция 9C++ осень 2012 лекция 9
C++ осень 2012 лекция 9
 
TT
TTTT
TT
 

Django шахрай. версия 4

  • 1. Django Шахрай М.С. 4 курс 2009-2010
  • 2. Создатели Адриан Головатый ( Adrian Holovaty ), Саймон Виллисон ( Simon Willison ), Джекоб Каплан-Мосс ( Jacob Kaplan-Moss ), Вилсон Майнер ( Wilson Miner )
  • 3. История Создатели: Эдриан Холовати (Adrian Holovaty) и Симон Виллисон Работали над созданием нескольких новостных сайтов для World Online Жесткие требования к времени разработки сайта Надо разрабатывать похожую функциональность Исходя из своих потребностей создали новый фреймворк 2005 год – библиотека становится открытой Джанго Рейнхардт в среде джазменов известный также под прозвищем «Великий Джа́нго» — джазмен-гитарист, один из основателей уникального стиля в гитарном джазе под названием «джаз-мануш», или «цыганский джаз».
  • 5. Установка (1 /2) Установка Python Ядро среды Django работает с любыми версиями Python в диапазоне от 2.3 до 2.6 включительно.  Python 3.0 пока не поддерживается. Установка официального релиза Django (из репозитория) или самой новой версии – из транка
  • 6.
  • 8.
  • 10. Возможности обработки URL Blogs Articles News На сайте несколько разделов Разные страницы HTML генерируются по разному HTTP запрос Blogs Articles News URL обработчик HTML страница
  • 11. Возможности обработки URL В Django для выбора обработчика запроса применяются регулярные выражения. Рассмотрим пример: from django.conf.urls.defaults import * from mysite.views import hello urlpatterns = patterns('', ('^hello/$', hello), … ) В данном случае http запрос на адрес http://mysite.ru/hello/ будет обрабатываться функцией hello
  • 12. Возможности обработки URL Одна из приятных возможностей – выделение части URL как параметра и передачи ее в функцию - обработчик. (r'^time/plus/{1,2}/$', hours_ahead), - для запроса http://mysite.ru /time/plus/2 число 2 будет передано в функцию – обработчик hours_ahead в качестве второго параметра
  • 13. MTV model – template - view
  • 14. Классическая модель MVC В создании сайтов часто используется архитектура MVC (model-view-controller). Модель (model) – инкапсулирует в себе всю работу с данными, в т.ч. работу с источниками данных (БД). Представление ( view) – отвечает за отображение информации (пользовательский интерфейс). Контроллер ( controller) – интерпретирует запросы, введенные пользователем, получает необходимые данные из модели и выводит их представление.
  • 15. MTV ? В Django используется архитектура MTV (model-template-view). Модель ( model) – классы для работы с предметной логикой ( ORM) Шаблоны ( template) – формат генерации html страниц (и не только) по выбранным данным Представление (view) – обработка запросов пользователей, выборка данных из Модели и передачи их на генерацию в нужный Шаблон View Controller Template View Model Model MTV MVC
  • 17.
  • 19. Зачем нужны шаблоны? HTML страницы Код на Python HTML страницы дизайнер программист Формат данных
  • 20. Шаблоны Django Шаблон Django – это строка специального формата, предназначенная для разделения документа от его данных. Шаблон используется для генерации html страниц и представляет собой обычный html документ с обозначенными местами подстановки значений переменных и различными видами основной логики (шаблонные теги).
  • 21. <html> <head><title>Ordering notice</title></head> <body> <h1>Ordering notice</h1> <p>Dear {{ person_name }} ,</p> <p>Thanks for placing an order from {{ company }} . It's scheduled to ship on {{ ship_date|date:&quot;F j, Y&quot; }} .</p> <p>Here are the items you've ordered:</p> <ul> {% for item in item_list %} <li> {{ item }} </li> {% endfor %} </ul> {% if ordered_warranty %} <p>Your warranty information will be included in the packaging.</p> {% else %} <p>You didn't order a warranty, so you're on your own when the products inevitably stop working.</p> {% endif %} <p>Sincerely,<br /> {{ company }} </p> </body> </html> подстановка значения переменной подстановка с применением фильтра обработка элементов списка if - else
  • 22. Пример использования >>> from django import template >>> t = template.Template('My name is {{ name }}.') >>> c = template.Context({'name': 'Adrian'}) >>> print t.render(c) My name is Adrian. >>> c = template.Context({'name': 'Fred'}) >>> print t.render(c) My name is Fred.
  • 23. Теги (1/3) if / else {% if today_is_weekend %} <p>Welcome to the weekend!</p> {% endif %} {% if today_is_weekend %} <p>Welcome to the weekend!</p> {% else %} <p>Get back to work.</p> {% endif %} Тег  {% if %}  принимает  and ,  or  или  not  для тестирования множества переменных или инвертирования.
  • 24. Теги (2/3) f or Тег  {% for %}  позволяет обработать каждый элемент последовательности. <ul> {% for athlete in athlete_list %} <li> {{ athlete.name }} </li> {% endfor %} </ul> Для обработки списка в обратном порядке надо добавить reversed : {% for athlete in athlete_list reversed %} ... {% endfor %}
  • 25. Теги (3/3) f or - empty {% for athlete in athlete_list %} <p> {{ athlete.name }} </p> {% empty %} <p>There are no athletes. Only computer programmers.</p> {% endfor %}
  • 26. Другие теги Проверка эквивалентности {% ifequal a_val b_val %} Однострочный комментарий {# This is a comment #} Многострочный комментарий {% comment %} This is a multi-line comment. {% endcomment %}
  • 27.
  • 28.
  • 30.
  • 31. Как создать модель? Нисходящий метод Классы Связи Схемы БД Восходящий метод Классы Связи Схемы БД Связи Связи
  • 32. Модели в Django Для описания модели в Django надо написать класс, наследуемый от models.Model пакета django.db. Поля в описываемом классе – объекты типов models.CharField, models.URLField, models.EmailField и т.п. Для класса автоматически создаются методы для манипуляции с объектами, операции автоматически отображаются в базу данных. Рассмотрим пример:
  • 33. from django.db import models class Publisher( models.Model ): name = models.CharField (max_length=30) address = models.CharField (max_length=50) city = models.CharField (max_length=60) state_province = models.CharField (max_length=30) country = models.CharField (max_length=50) website = models.URLField () class Author( models.Model ): salutation = models.CharField (max_length=10) first_name = models.CharField (max_length=30) last_name = models.CharField (max_length=40) email = models.EmailField () headshot = models.ImageField (upload_to='/tmp') class Book( models.Model ): title = models.CharField (max_length=100) authors = models.ManyToManyField (Author) publisher = models.ForeignKey (Publisher) publication_date = models.DateField ()
  • 34. Создание объектов модели Создадим объект Publisher и сохраним его в БД >>> from books.models import Publisher >>> p1 = Publisher(name= 'Addison-Wesley' , address= '75 Arlington Street' , ... city= 'Boston' , state_province= 'MA' , country= 'U.S.A.' , ... website= 'http://www.apress.com/' ) >>> p1.save() Можно короче: >>> p1 = Publisher.objects.create(name= 'Apress' , ... address= '2855 Telegraph Avenue' , ... city= 'Berkeley' , state_province= 'CA' , country= 'U.S.A.' , ... website= 'http://www.apress.com/' )
  • 35. Строковое представление Изменим объект Publisher : добавим метод __unicode__(self). class Publisher( models.Model ): name = models.CharField (max_length=30) address = models.CharField (max_length=50) city = models.CharField (max_length=60) state_province = models.CharField (max_length=30) country = models.CharField (max_length=50) website = models.URLField () def __unicode__(self): return self.name Метод __ unicode__ говорит системе как отображать данный объект в строковом представлении
  • 36. Выборка объектов (1 /2) Отобразить все объекты: >>> Publisher.objects.all() [<Publisher: Apress>, <Publisher: O'Reilly>] Отобразить часть объектов(фильтр): >>> Publisher.objects.filter(name= 'Apress' ) [<Publisher: Apress>] >>> Publisher.objects.filter(country= &quot;U.S.A.&quot; , state_province= &quot;CA&quot; ) [<Publisher: Apress>] >>> Publisher.objects.filter(name__contains= &quot;press&quot; ) [<Publisher: Apress>] Получение одного объекта >>> Publisher.objects.get(name= &quot;Apress&quot; ) <Publisher: Apress>
  • 37. Выборка объектов ( 2/2) Сортировка объектов: >>> Publisher.objects.order_by( &quot;name&quot; ) [<Publisher: Apress>, <Publisher: O'Reilly>] Сортировка в обратном порядке: >>> Publisher.objects.order_by( &quot;-name&quot; ) [<Publisher: O'Reilly>, <Publisher: Apress>] Формирование цепочки запросов >>> Publisher.objects.filter(country= &quot;U.S.A.&quot; ).order_by( &quot;-name&quot; ) [<Publisher: O'Reilly>, <Publisher: Apress>] Ограничение выборки: >>> Publisher.objects.order_by( 'name' )[0:2]
  • 38. Удаление объектов >>> p = Publisher.objects.get(name= &quot;O'Reilly&quot; ) >>> p.delete() >>> Publisher.objects.all() [<Publisher: Apress Publishing>]
  • 40. Зачем нужно кэширование? Схема без кэширования Схема с кэшированием HTTP запрос Обработка запроса Выборка данных Из БД Генерация HTML страницы HTML страница HTTP запрос HTML страница КЭШ
  • 41. Кэширование в Django Memcached Кэширование в базу данных Кэширование на файловую систему Кэширование в оперативную память Dummy кэширование
  • 42. Иерархия кэширования Blogs Articles News Кэширование всего сайта Blogs Articles News Кэширование отдельного представления News Низкоуровневый API
  • 44. Интерфейс администратора в Django Интерфейс администратора Наполнение сайта контентом Редактирование данных Разграничение прав доступа
  • 45.  
  • 46.  
  • 47.  
  • 49.
  • 51. Философия Django Средства, предоставляемые Django Django Templates Django Models django.contrib Cheetah Mako ? SQL ? Свои классы
  • 53. Что почитать? http://www.djangoproject.com/ - официальный сайт проекта http://www.djangobook.com/ - туториал по работе с Django http://djbook.ru/ - русский перевод Djangobook
  • 55. Примерная схема работы Поддержание сайта Разработка схем кэширования 5-10% Интеграция 5% Обработка форм 20-25% Разработка views 25% Наполнение контентом (статьи, картинки, …) Настройка схем url 5% Настройка интерфейса администратора в соответствии с нуждами проетка 5% Разработка шаблонов (templates) Разработка классов ( model) 20% Разработка соглашений о необходимых данных для каждой страницы 5% Разработка структуры сайта ( URLs ) Выявление сущностей (классы) 5% Дизайнер Программист
  • 56.
  • 57. Шаг 1. Создание нового проекта Создаем новый проект: django-admin.py startproject MySuperProject Будет создана папка с названием MySuperApplication и следующим содержимым: Настройка URL (редактируется программистом) urls.py Здесь все настройки проекта, в частности настройки БД и подключаемые модули setting.py Управление проектом через специальные директивы, например manage.py runserver – запустит тестовый сервер manage.py технический файл __ init__.py
  • 58. Шаг 2 . Создание моделей Создаем приложение (каждый класс должен быть определен в каком-нибудь приложении, для возможности последующей переносимости): manage.py startapp MyFirstApp Внутри проекта будет создана папка с названием MyFirstApp и следующим содержимым: Здесь надо описывать переносимые (?) views , необходимость сомнительна views.py Здесь надо описывать свои тесты tests.py Предполагается, что классы будут описываться тут models.py технический файл __ init__.py
  • 59.
  • 60.
  • 61. Шаг 5. Настройка отображения в интерфейсе администратора Добавляем в папку приложения файл admin.py с примерно следующим содержимым:
  • 62. Шаг 6 . Разрабатываем tempates и views Шаг 7 . Делаем обработчики форм Шаг 8. Заполняем контентом. Шаг 9. Приложение готово!

Editor's Notes

  1. Здесь можно остановиться наподольше