python-04
.pdfЯзык программирования Python
Курушин Д.С.
2009 2010
Среда разработки Django
Рассмотрим программу, написанную на Python без использования среды разработки:
Пример
print "Content-Type: text/html" print
print "<html><head><title>Книги</title></head><body>" print "<h1>Книги</h1>"
print "<ul>"
print "<li>Мастер и Маргарита</li>" print "<li>Фауст</li>"
print "</ul>"
print "</body></html>"
Среда разработки Django I
Cогласно требованиям CGI, код выводит: 1 Строку ¾Content-Type¿.
2 Пустую строку (конец заголовка HTTP).
3Необходимые HTML теги. Также:
1 Подключается к базе данных и выполняет запросы
2 Обрабатывает результат запроса
3Закрывает соединение с базой данных.
Среда разработки Django II
Данный подход имеет ряд проблем и недостатков. Задайте себе эти вопросы:
Что произойд¼т, если потребуется обеспечить работу
множества компонентов вашего приложения с базой данных?
Действительно ли разработчик должен беспокоиться о
выводе строки ¾Content-Type¿ и помнить о необходимости закрывать соединение с базой данных?
Что произойд¼т, если этот код будет использоваться во
множестве сред, каждая со своей базой данных и логином? В этом случае потребуется вводить некоторую конфигурацию, специфичную для среды исполнения.
Что произойд¼т, если дизайнер, который не имеет опыта
разработки на языке Python, пожелает поменять вид страницы?
Пример MVC
Давайте рассмотрим небольшой пример, который демонстрирует разницу между предыдущим подходом и тем, который предлагает среда разработки. Мы разделим этот код на четыре файла:
Файл models.py описывает таблицу базы данных from django.db import models
class Book(models.Model):
name = models.CharField(max_length=50) pub_date = models.DateField()
Пример MVC
Файл views.py описывает логику приложения
from django.shortcuts import render_to_response from models import Book
def latestbooks(request):
book_list = Book.objects.order_by('-pub_date')[:10] return render_to_response(
'latestbooks.html', {'book_list': book_list}
)
Пример MVC
Файл urls.py описывает соответствие URL логике приложения
from django.conf.urls.defaults import * import views
urlpatterns = patterns('', (r'^latest/$', views.latestbooks),
)
Пример MVC
Файл latestbooks.html описывает HTML шаблон
<html><head><title>Книги</title></head>
<body>
<h1>Книги</h1>
<ul>
{% for book in book_list %} <li>{{ book.name }}</li>
{% endfor %} </ul> </body></html>
Пояснения
Главной идеей в Django является разделение задач:
Ôàéë models.py содержит описание таблицы базы данных, представленное в виде класса Python. Такой класс называется моделью. С помощью данного класса вы можете создавать, получать, обновлять и удалять записи в таблице вашей базы данных.
Ôàéë views.py содержит логику отображения страницы в функции latestbooks(). Такая функция называется представлением.
Ôàéë urls.py определяет какое именно представление будет вызвано для URL, заданного в виде шаблона.
Ôàéë latestbooks.html является HTML шаблоном, который описывает дизайн страницы.
Определения и понятия I
Объедин¼нные вместе, эти компоненты приложения следуют шаблону Модель ! Представление ! Контролл¼р
(Model ! View ! Controller, MVC).
Определение
MVC определяет способ разработки программного обеспечения при котором код для определения и доступа к данным (модель) отдел¼н от логики приложения (управление), которая в свою очередь отделена от интерфейса пользователя (представление).