|
Оглавление
|
Содержание Перевод © Попов Руслан <ruslan.popov • gmail> В предыдущей главе мы объяснили как настроить проект и запустить сервер разработки. В этой главе вы изучите основы создания динамических страниц с помощью Django. В качестве вашего первого задания, давайте создадим страницу, которая будет выводить знаменитое сообщение: «Здравствуй, Мир».
Если бы вы создавали обычную страницу с текстом
«Здравствуй, Мир» без использования Django, то
достаточно было бы создать файл с таким текстом, дать ему имя
Используя Django, вы указываете те же самые параметры, но другим способом. Содержимое страницы создаётся с помощью функции представления, а URL определяется в файле привязок URL. Сначала давайте напишем нашу функцию представления.
Внутри каталога
Наше представление простое, оно состоит из кода функции и
оператора импорта. Вот содержимое файла
# -*- coding: utf-8 -*-
from django.http import HttpResponse
def hello(request):
return HttpResponse("Здравствуй, Мир")
Пройдёмся по коду, строчка за строчкой:
Основная идея в том, что представление является функцией языка
Python, которая принимает
Если в этот момент вы бы запустили снова коману
python manage.py runserver, то вы бы
увидели сообщение «Welcome to Django» без единого
следа нашего представления. Так происходит потому, что наш
проект mysite ещё не знает о представлении
Файл привязки URL можно рассматривать как
таблицу с содержанием вашего сайта. Проще говоря, этот файл
определяет соответствие между URL и функциями представления,
которые должны быть вызваны для этих URL. Именно так вы
указываете Django: «Для данного URL, вызывай этот код, а для этого URL вызывай вот этот код.» Например,
«Если кто-нибудь посетит URL /foo/,
вызывай функцию представления
Когда вы запустили django-admin.py startproject в предыдущей лаве, скрипт автоматически
создал для вас файл привязки:
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 *
urlpatterns = patterns('',
)
Давайте пройдём по каждой строчке этого кода:
Основным элементом данного кода является переменная
Для того, чтобы добавить URL и представление в файл привязки,
просто добавьте кортеж, объединяющий URL и функцию
представления. Ниже показана привязка для нашего представления
from django.conf.urls.defaults import *
from mysite.views import hello
urlpatterns = patterns('',
('^hello/$', hello),
)
(Следует отметить, что мы убрал закомментированные строчки для ясности. Вы можете оставить эти строки, если вам захочется.) Мы сделали следующие изменения:
В двух словах, мы просто указали Django, что любой запрос к
URL /hello/ должен быть обработан с помощью
функции представления
Ваш PYTHONPATHВаш PYTHONPATH является списком каталогов вашей системы, где интерпретатор Python производит поиск модулей в момент когда вы используете оператор import. Например, допустим, что путь имеет следующее значение: ['', '/usr/lib/python2.4/site-packages', '/home/username/djcode/']
При выполнении кода: from foo import bar
интерпретатор сначала проверит наличие файла
Если вам интересно посмотреть на значения пути, запустите интерпретатор и выполните следующие команды: >>> import sys >>> print sys.path
В общем случае вам не требуется беспокоиться о настройке
пути. Это задача Python и Django, они сами об этом
позаботятся. (Настройка пути, это одна из задач, которыми
занимается скрипт
Стоит обсудить синтаксис данного шаблона URL, так как он может быть не совсем очевиден. Несмотря на то, что шаблон должен совпадать с /hello/, он выглядит немного не так. Объясним почему:
Следует отметить ещё один важный момент. В шаблоне URL мы
передаём функцию представления Для того, чтобы протестировать наши изменения внесённые в файл привязок, запустите тестовый сервер, как это было показано в главе «Начинаем», выполнив команду python manage.py runserver. (Если вы не останавливали его работу, это тоже неплохо. Тестовый сервер автоматически обнаруживаетизменения в вашем коде и выполняет его перезагрузку по необходимости, таким образом, вам не надо делать это вручную.) Сервер привязывается к адресу http://127.0.0.1:8000/, так что откройте браузер и пройдите по ссылке http://127.0.0.1:8000/hello/. Вы должны увидеть текст «Здравствуй, Мир» — результат работы вашего представления. Ура! Вы создали вашу первую страницу с помощью Django.
Регулярные выраженияРегулярные выражения[6] — компактный метод определения шаблонов в тексте. В то время как схема URL Django позволяет использование определённых регулярных выражений для работы с URL, вероятно на практике вы будете использовать не так много регулярных выражений для шаблонов. В таблице «Выборка наиболее используемых шаблонов» приведена выборка наиболее используемых шаблонов.
Таблица 3.1. Выборка наиболее используемых шаблонов
В текущий момент наш файл привязок определяет единственный шаблон: тот, который обрабатывает запросы по URL URL. Что произойдёт при запросе другого URL? Чтобы узнать это запустите тестовый сервер и посетите страницу такую как http://127.0.0.1:8000/goodbye/ или http://127.0.0.1:8000/hello/subdirectory/, или даже такую http://127.0.0.1:8000/ (корень сайта). Вы должны увидеть сообщение «Страница не найдена» (см. картинку FIXME). Django отображает это сообщение, потому что вы запросили URL, который не был определён в файле привязок. Назначение данной страницы идёт значительно дальше простого отображения сообщения об ошибке 404. Она также точно вам указывает какой файл привязки использовало Django и показывает каждый шаблон из этого файла. Из этой информации вы получаете возможность понять, почему была вызвана ошибка 404. Обычно, эта информация предназначена только для вас, для разработчика. В случае боевого сайта, выставленного в Интернет, врядли вы пожелаете показывать такую информацию неизвестным людям. По этой причине страница с подробностями об ошибке 404 отображается только в том случае, когда ваш проект находится в режиме отладки. Мы расскажем как деактивировать режим отладки позже. Сейчас просто запомните, что новый проект Django всегда создаётся со включенным режимом отладки, и что когда проект не находится в этом режиме, Django показывает совсем другое сообщение об ошибке 404. Как было описано в последнем разделе, вы увидите сообщение об ошибке 404 в случае, если вы перейдёте в корень сайта — по URL http://127.0.0.1:8000/. Django ничего не добавляет к корню сайта. Данный URL ни коем образом не является чем-то особенным. Назначить корню сайта соответствующий шаблон — это целиком ваша задача, как и всё остальное в вашем файле привязки. Шаблон для корня сайта не совсем очевиден, наверное стоит это отметить. Когда вы будете готовы реализовать представление для корня сайта, используйте шаблон '^$', который соответствует пустой строке. Например: from mysite.views import hello, my_homepage_view
urlpatterns = patterns('',
('^$', my_homepage_view),
# ...
)
[6] Для информации по регулярным выражениям обращайтесь на http://www.djangoproject.com/r/python/re-module/ и на http://docs.python.org/lib/re-syntax.html. |
Увидели ошибку?
Выделите её мышкой и нажмите
-
Обработано:
510
49
130
71
Версия книги
1.0
2.0
Версия 2.0 в процессе перевода!
Мой луч
Многообразие света
Полезное
Актуальные вакансии,
Python работа
для python-разработчиков.
Скачать в формате
CHM от 2 сентябряЗаказать PDF файл можно через почту, чат, джаббер. Всего 2WMZ. Содержимое точно соответствует содержимому сайта. Чем чаще заказываете — тем больше перевожу. Русская группа
Ускорить процесс перевода!
R130494980980
Z425285133788 E112528079659 U327380922061 Книга помогла реализовать:
|
| © 2008-2009 Ruslan Popov @ gmail.com | Powered by Django 1.1 beta 1 SVN-11114 |