DJANGO Simon Willison Adrian Holovaty Jacob Kaplan-Moss Wilson Miner
Это фреймворк для разработки веб-приложений, написанный на языке Python. С помощью фреймворков программистам не нужно для решения каждой конкретной задачи писать код с нуля. DJANGO
Model-view-controller (MVC) ControllerModelView архитектура программного обеспечения, в которой модель данных приложения, пользовательский интерфейс и управляющая логика разделены на три отдельных компонента, так, что модификация одного из компонентов оказывает минимальное воздействие на другие компоненты. Шаблон MVC позволяет разделить данные, представление и обработку действий пользователя на три отдельных компонента: Модель (Model) Представление (View) Поведение (Controller)
Архитектура Django (MTV) ViewModelTemplate
Некоторые возможности: ORM, API доступа к БД с поддержкой транзакций диспетчер URL на основе регулярных выражений расширяемая система шаблонов с тегами и наследованием подключаемая архитектура приложений, которые можно устанавливать на любые Django-сайты библиотека для работы с формами (наследование, построение форм по существующей модели БД) встроенная автоматическая документация по тегам шаблонов и моделям данных, доступная через административное приложение
ORM запись объектов программы в реляционную базу данных, отображение объекта и его представления в виде набора таблиц. ORM технология программирования, которая связывает базы данных с концепциями объектно- ориентированных языков программирования, создавая «виртуальную объектную базу данных»
Страница DjangoResources в wiki проекта Django : здесь многие авторы сообщают всему миру о своих приложениях. Прямая ссылка на страницу: Google Code : бесплатное размещение и понятный интерфейс обеспечили сайту Google Code высокую популярность у разработчиков приложений на платформе Django. Djangopluggables.com : относительно новый ресурс djangopluggables.com представляет собой сайт с удобным дизайном, на котором собрана информация о самых разнообразных приложениях на платформе Django
1. Продолжается ли развитие? Когда были внесены последние изменения или исправления? 2. Имеется ли документация? Действительно ли это документация? Хорошо ли она организована и легко ли ее читать? 3. Кто автор? 4. Как написан программный код? Как организованы файлы с исходными текстами? Присутствуют ли в них строки документирования, поясняющие назначение функций и методов?
Вы можете поместить приложение в любое место по своему желанию, но по сути у вас имеется три варианта: встраивание создание разделяемого приложения установка в каталог site-packages Сторонние приложения на платформе Django, так же, как и ваши, - это всего лишь модули на языке Python. Чтобы задействовать их в проекте, достаточно просто добавить строку, содержащую путь к приложению в параметр INSTALLED_APPS, в файле settings.py проекта.
Django позволяет сфокусироваться на творческой части разработки, облегчая её нудную часть. Для этого разработчику предоставляются высокоуровневые шаблоны, готовые решения для стандартных задач и явные соглашения о том как надо решать проблемы. Цель:
В чём разница между проектом и приложением? Первое является конфигурацией, а второе кодом: Проект это экземпляр определённого набора кода Django-приложений и конфигурация для этих приложений. Приложение это переносимый набор некой функциональности, обычно включает в себя модели и представления, которые хранятся вместе в едином пакете языка Python
Создание блога. Ваша первая страница на Django: «Hello World» В качестве первого задания, давайте создадим страницу, которая будет выводить знаменитое сообщение: «Hello World» Если бы вы создавали обычную страницу с текстом «Hello World» без использования Django, то достаточно было бы: создать файл с таким текстом дать ему имя hello.html загрузить в каталог на веб сервере. Следует отметить, что в этом случае, вы определяете два ключевых параметра страницы: её содержимое (строка «Hello World») и её URL. ( Используя Django, вы указываете те же самые параметры, но другим способом. Содержимое страницы создаётся с помощью функции представления, а URL определяется в файле привязок URL
Сделаем первый шаг в разработке приложения, создав проект. Проектом является набор настроек для экземпляра Django, включая конфигурацию базы данных, параметров для Django и настроек приложения. mysite/ __init__.py manage.py settings.py urls.py
__init__.py: Файл необходим для того, чтобы Python рассматривал данный каталог как пакет, т.е., как группу модулей. manage.py: Это утилита командной строки, которая позволяет вам взаимодействовать с проектом различными методами. settings.py: Настройки для текущего проекта Django. urls.py: Описания URL для текущего проекта Django, так сказать «оглавление» для вашего сайта. Несмотря на свой небольшой размер, эти файлы формируют работоспособное приложение Django
Быстрый старт Каждый проект начинается с создания каталога: django-admin.py startproject mysite Для работы с базой данных необходимо создать в проекте приложение. Переходим в каталог./mysite и приступаем к созданию: python manage.py startapp blog Переходим в каталог./blog и принимаемся за наполнение файла models.py, в соответствии с разделом «Первая модель»
Первое приложение python manage.py startapp blog Эта команда ничего не выводит, она просто создаёт каталог blog в каталоге mysite. Посмотрим на содержимое этого каталога: blog/ __init__.py models.py views.py Это каркас для нашего приложения
Первая модель from django.db import models class BlogPost (models.Model): title = models.CharField(max_length=150) body = models.TextField() timestamp = models.DateTimeField()
Использование SQLite В файле с настройками существует шесть параметров, имеющих отношение к базе данных: DATABASES_ENGINE, DATABASES_NAME, DATABASES_USER, DATABASES_PASSWOR, DATABASES_HOST, DATABASES_PORT. При использовании базы данных SQLite достаточно сообщить платформе Django всего два параметра: (с учетом того, что мы создали каталог db) DATABASES _ENGINE = 'sqlite3' DATABASES _NAME = r'C:\Python26\django\mysite\db\django.db'
Создание таблиц Подключаемся к базе данных и создаем необходимые таблицы:.\manage.py syncdb Теперь в системе аутентификации имеется учетная запись суперпользователя.
Настройка автоматизированного приложения администрирования. Так как это приложение не относится к разряду обязательных, его требуется указать в файле settings.py. Добавляем следующую строку в кортеж INSTALLED_APPS, сразу вслед за django.contrib.auth: django.contrib.admin Всякий раз после добавления нового приложения в свой проект, вы должны запустить команду syncdb, чтобы обеспечить создание всех необходимых таблиц в вашей базе данных
Привязка URL Для привязки функции представления к конкретному URL в Django используются файлы привязки URL. Когда мы запускали django-admin.py startproject, скрипт автоматически создал файл привязки: urls.py. По-умолчанию, он выглядит примерно так: from django.conf.urls.defaults import * # Uncomment the next two lines to enable the admin: # from django.contrib import admin # admin.autodiscover() urlpatterns = patterns('', # Example: # (r'^mysite/', include('mysite.foo.urls')), # Uncomment the admin/doc line below and add 'django.contrib.admindocs' # to INSTALLED_APPS to enable admin documentation: # (r'^admin/doc/', include('django.contrib.admindocs.urls')), # Uncomment the next line to enable the admin: # (r'^admin/', include(admin.site.urls)), ) from django.conf.urls.defaults import * from django.contrib import admin admin.autodiscover() urlpatterns = patterns('', # Example: # (r'^mysite/', include('mysite.foo.urls')), (r'^admin/doc/', include('django.contrib.admindocs.urls )), (r'^admin/', include(admin.site.urls)), ) Раскомментируем некоторые строки:
Регистрация нашей модели Открываем файл mysite/blog/models.py, добавляем инструкцию импортирования приложения администрирования и затем добавляем в конец файла строку, выполняющую регистрацию нашей модели: from django.db import models from django.contrib import admin class BlogPost (models.Model): title = models.CharField(max_length=150) body = models.TextField() timestamp = models.DateTimeField() admin.site.register(BlogPost)
Опробование приложения администрирования выполняем команду manage.py runserver открываем в веб-браузере страницу попадаем на домашнюю страницу администратора.
Создание общедоступного раздела приложения блога Страница состоит из трех компонентов: Шаблон Функция представления Шаблон адреса URL
Создание шаблона {% for post in posts %} {{ post.title }} {{ post.timestamp }} {{ post.body }} {% endfor %} Сохраняем этот шаблон в файл с именем archive.html в каталоге templates, внутри каталога blog. Имя самого шаблона можно выбирать совершенно произвольно, но имя каталога обязательно должно быть templates.
Создание функции представления Открываем файл blog/views.py и добавляем следующее: 1. from django.template import loader, Context 2. from django.http import HttpResponse 3. from mysite.blog.models import BlogPost def archive(request): 6. posts = BlogPost.objects.all() 7. t = loader.get_template("archive.html") 8. c = Context({ 'posts': posts }) 9. return HttpResponse(t.render(c))
Создание шаблона адреса URL В файле mysite/urls.py присутствует закомментированная строка с примером. Редактируем ее: url(r'^blog/', include('mysite.blog.urls')) Создаем новый файл mysite/blog/urls.py и добавляем в него следующие строки: from django.conf.urls.defaults import * from mysite.blog.views import archive urlpatterns = patterns('', url(r'^$', archive), )
Создаем в каталоге mysite/blog/templates шаблон с именем base.html и добавляем в него следующие строки: body { color: #efd; background: #245; padding: 0 5em; margin: 0 } h1 { padding: 2em 1em; background: #756 } h2 { color: #bf8; border-top: 2px dotted #fff; margin-top: 2em } p {margin: 1em 0 } mysite.example.com {% block content %} {% endblock %} Усовершенствование шаблона
Чтобы задействовать этот шаблон в приложении блога, необходимо изменить шаблон archive.html так, чтобы он ссылался на этот новый базовый шаблон и его блок content: {% extends "base.html" %} {% block content %} {% for post in posts %} {{ post.title }} {{ post.timestamp }} {{ post.body }} {% endfor %} {% endblock %} Усовершенствование шаблона
Как протестировать? Запускаем тестовый сервер, выполнив команду python manage.py runserver. Сервер привязывается к адресу так что открываем браузер и проходим по ссылке
Тестирование приложений Django def my_func(a_list, idx): """ >>> a = ['larry', 'curly', 'moe'] >>> my_func(a, 0) 'larry' >>> my_func(a, 1) 'curly' """ return a_list[idx] import unittest class MyFuncTestCase(unittest.TestCase): def testBasic(self): a = ['larry', 'curly', 'moe] self.assertEqual(my_func(a, 0), 'larry') self.assertEqual(my_func(a, 1), 'curly') Doctests Unit tests
Пример написания Doctests # models.py from django.db import models class Animal(models.Model): """ An animal that knows how to make noise # Create some animals >>> lion = Animal.objects.create(name="lion", sound="roar") >>> cat = Animal.objects.create(name="cat", sound="meow") # Make 'em speak >>> lion.speak() 'The lion says "roar" >>> cat.speak() 'The cat says "meow"' """ name = models.CharField(max_length=20) sound = models.CharField(max_length=20) def speak(self): return 'The %s says "%s"' % (self.name, self.sound)
from django.utils import unittest from myapp.models import Animal class AnimalTestCase(unittest.TestCase): def setUp(self): self.lion = Animal.objects.create(name="lion", sound="roar") self.cat = Animal.objects.create(name="cat", sound="meow") def testSpeaking(self): self.assertEqual(self.lion.speak(), 'The lion says "roar"') self.assertEqual(self.cat.speak(), 'The cat says "meow"') Используем Unit tests