Лекция #6. Введение в Django web-framework

24
WEB-ПРОГРАММИРОВАНИЕ Лекция #6. Введение в Django web-framework Яковенко К. С Омский государственный университет им. Ф. М. Достоевского Факультет компьютерных наук
  • Upload

    -
  • Category

    Education

  • view

    2.121
  • download

    10

description

Web-программирование Лекция #6. Введение в Django web-framework Цикл лекций читается в Омском государственном университете им. Ф.М.Достоевского на факультете компьютерных наук. Лектор: Яковенко Кирилл Сергеевич.

Transcript of Лекция #6. Введение в Django web-framework

Page 1: Лекция #6. Введение в Django web-framework

WEB-ПРОГРАММИРОВАНИЕЛекция #6. Введение в Django web-framework

Яковенко К. С

Омский государственный университет им. Ф. М. ДостоевскогоФакультет компьютерных наук

Page 2: Лекция #6. Введение в Django web-framework

2

Web-framework— представляет собой программное обеспечение или набор инструментов, которые предназначены для упрощения поддержки, создания и развития динамических веб-сайтов, веб-приложений, веб-сервисов и веб-ресурсов.

Главная цель framework'а, предоставить программисту удобную среду и структуру проекта с большим и хорошо расширяемым функционалом.

Большинство современных web-framework'ов строятся на основе архитектурного паттерна MVC.

Page 3: Лекция #6. Введение в Django web-framework

3

MVC (Model-View-Controller)(wikipedia) схема использования нескольких шаблонов проектирования, с помощью которых модель данных приложения, пользовательский интерфейс и взаимодействие с пользователем разделены на три отдельных компонента таким образом, чтобы модификация одного из компонентов оказывала минимальное воздействие на остальные.

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

Page 4: Лекция #6. Введение в Django web-framework

4

Django

(wikipedia) бесплатный web-framework с открытым исходным кодом, который написан на языке программирования Python и придерживающийся архитектурного паттерна MVC.

Официальный сайт: https://www.djangoproject.com/

Github: https://github.com/django/django

Лицензия: BSD

Page 5: Лекция #6. Введение в Django web-framework

5

История развития Django

Создатели:

Адриан Головатый (Adrian Holovaty)Саймон Уиллисон (Simon Willison)

Первый релиз состоялся осенью 2003 года, использовался в новостных лентах online-газеты Lawrence Journal-World.

В июле 2005 г. опубликован под BSD лицензией.

После этого момента новые релизы выходят каждые 6-9 месяцев.

Page 6: Лекция #6. Введение в Django web-framework

6

Стандартный функционал Django

Система конфигурирования URLs

Django ORM (Object-relational mapping)

Расширяемая система шаблонов

«Class-based views» – универсальные представления

Библиотека для работы с формами

Встроенный интерфейс администратора

Встроенная система кэширования

Интернационализация

+ многое другое

Page 7: Лекция #6. Введение в Django web-framework

7

Основные принципы Django

Django стремится быть «питонической»

DRY (Don't Repeat Yourself)

Слабая зависимость и гибкость

Быстрая разработка

Page 8: Лекция #6. Введение в Django web-framework

8

Общий обзор архитектуры

Django

Веб-браузерHTTP-клиентJavaScript

Интернет

HTTPD/веб-серверЗапрос HTTP (POST, GET)

Промежуточная боработка запроса

Анализ URL urls.py

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

Универсальные, полууниверсальныеили собственные представления views.py

Пакет моделей models.py ORM

Python DB-API

Адаптер базы данных

Ответ HTTP

Промежуточная боработка ответа

Ответ

Пакет шаблонов

База данных (СУРБД)

DJANGO

Page 9: Лекция #6. Введение в Django web-framework

9

Проект в Django

— представляет собой набор конфигурационных файлов и приложений Django.

Проект может содержать множество приложений Django.

Приложение Django — набор файлов, содержащих описание моделей и представлений, которые являются частью одно пакета Python и представляют собой полное приложение.

Приложение может содержаться во множестве проектов.

Page 10: Лекция #6. Введение в Django web-framework

10

Создание и запуск Django проекта

Начать новый проект:

django-admin.py startproject example

Запустить локальный сервер:

python manage.py runserver

Page 11: Лекция #6. Введение в Django web-framework

11

Минимальная структура проекта Django

example/example/

__init__.pysettings.pyurls.pywsgi.py

manage.py

– каталог проекта– пакет проекта

– настройки проекта– конфигурация URL адресов– точка входа для wsgi– командная утилита Django

Page 12: Лекция #6. Введение в Django web-framework

12

Создание Django приложений

python manage.py startapp blog

После создания нового Django приложения необходимо зарегестрировать его в списке приложений принадлежащих проекту.

settings.py:

INSTALLED_APPS = (…

'example','blog'

)

Page 13: Лекция #6. Введение в Django web-framework

13

Минимальная структураDjango приложения

blog/__init__.pyadmin.pymigrations/

__init__.pyforms.py

models.pytests.pyviews.py

– пакет приложения

– настройки панели администратора– пакет содержаций миграций данных (появился в django 1.7)

– описание форм ввода информации (не создается по умолчанию)– описание таблиц б.д.– unit tests– бизнес-логика приложения

Page 14: Лекция #6. Введение в Django web-framework

14

Функция представления

— представляет собой Python функцию, которая порождает содержимое страницы.

from django.http import HttpResponse

def hello(request):return HttpResponse(“Hello world”)

django.http.HttpRequest

Всегда возвращает HttpResponse

Page 15: Лекция #6. Введение в Django web-framework

15

Объекты запроса и ответа (HttpRequest)

Класс HttpRequest представляет HTTP-запрос, полученный со стороны клиента и содержит:

информацию об URL (path и д.р.),

HTTP-заголовки запроса (META),

информацию об отправленных данных (GET, POST и FILES),

информацию о сессиях и cookies (session и COOKIES),

прочие переменные сервера.

Page 16: Лекция #6. Введение в Django web-framework

16

Объекты запроса и ответа (HttpResponse)

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

HttpResponse(content='', mimetype=None, status=200, content_type=DEFAULT_CONTENT_TYPE)

Но если необходимо добавлять содержимое постепенно, можно использовать объект response как объект файла:

response = HttpResponse()response.write("<p>Here's the text of the Web page.</p>")response.write("<p>Here's another paragraph.</p>")

Page 17: Лекция #6. Введение в Django web-framework

17

Подклассы HttpResponse

Модуль django.http содержит несколько подклассов HttpResponse, представляющих различные виды HTTP-ответов:

HttpResponseRedirect (302)

HttpResponseNotFound (404)

HttpResponseForbidden (403)

HttpResponseServerError (500)

и другие

Page 18: Лекция #6. Введение в Django web-framework

18

Конфигурирование URLs

построенно на принципе слабой связности.

Каждая конфигурация должна храниться в виде файла с програмным кодом на языке Python, обычно с названием urls.py

Такие файлы должны определять объект urlpatterns, получаемый в результате вызова функции django.conf.patterns.

Путь к главному конфигуратору определяется в settings.py переменной ROOT_URLCONF

Page 19: Лекция #6. Введение в Django web-framework

19

Конфигурирование URLs (пример)

from django.conf.urls import patterns, include, urlfrom example.views import hello

urlpatterns = patterns('', # Examples:

(r'^hello/', hello), url(r'^$', 'example.views.home', name='home'), url(r'^example/', include('example.blog.urls')),)

Page 20: Лекция #6. Введение в Django web-framework

20

Настройка представления стандартных ошибок

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

handler404 = 'django.views.defaults.page_not_found'

handler500 = 'django.views.defaults.server_error'

handler403 = 'django.views.defaults.permission_denied'

handler400 = 'django.views.defaults.bad_request'

Они могут быть переопределены только в главном конфигураторе URL.

Page 21: Лекция #6. Введение в Django web-framework

21

Система шаблонов Django

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

Язык шаблонов в Django не имеет никакого отношения к Python и создан для веб-технологов и дизайнеров интерфейсов.

Page 22: Лекция #6. Введение в Django web-framework

22

Идеологические основыDjango шаблонов

Бизнес-логика должна быть отделена от логики представления.

Синтаксис не должен быть привязан к HTML/XML.

Предполагается, что дизайнеры уверенно владеют HTML.

Не предполагается, что дизайнеры умеют программировать на Python.

Не ставилась задача изобрести новый язык программирования.

Page 23: Лекция #6. Введение в Django web-framework

23

Конфигурирование и загрузка Django шаблонов

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

Сперва в settings.py нужно задать:TEMPLATE_DIRS = (

"/путь/к/папке/содержащей/шаблоны",)

После можно использовать:

from django.shortcuts import render_to_response

def hello(request):return render_to_response(‘hello.html’)

Page 24: Лекция #6. Введение в Django web-framework

24

Яковенко Кирилл Сергеевич[email protected]

Омский государственный университет им. Ф. М. ДостоевскогоФакультет компьютерных наук