Середовища Web-розробки на мові Python, Частина 1: Розробка для Web за допомогою Django і Python

  1. Серія контенту:
  2. Цей контент є частиною серії: Середовища Web-розробки на мові Python, Частина 1
  3. установка Django
  4. Лістинг 1. Завантаження та установка Django
  5. Інструмент адміністрування Django
  6. Лістинг 2. Використання інструменту адміністрування Django
  7. Проекти та програми в Django
  8. Лістинг 3. Створення проекту
  9. Лістинг 4. Зміст директорії djproject
  10. Лістинг 5. Використання manage.py з параметром startapp
  11. Лістинг 6. Зміст директорії додатку jobs
  12. Лістинг 7. Додавання рядка до settings.py
  13. створення моделі
  14. Лістинг 8. Конфігурація бази даних в settings.py
  15. Лістинг 9. Модуль jobs / models.py
  16. Лістинг 10. Перегляд схеми бази даних за допомогою команди manage.py sql
  17. набори запитів
  18. Лістинг 11. Висновок всіх робіт (jobs)
  19. Лістинг 12. Виняток і фільтрація робіт (jobs)
  20. Лістинг 13. Знову виняток і фільтрація робіт (jobs)
  21. Лістинг 14. Python-розсічення
  22. Лістинг 15. Підрахунок записів
  23. інструмент адміністратора
  24. Лістинг 16. Зміни в settings.py
  25. Лістинг 17. Використання urls.py, щоб іструмент адміністратора став доступним
  26. Лістинг 18. Використання тест-сервера, щоб побачити інструмент адміністратора
  27. Лістинг 19. Добасвленіе класу Location за допомогою інструменту адміністратора
  28. Малюнок 1. Зміна місцезнаходжень за допомогою інструменту адміністратора
  29. Малюнок 2. Висновок місцезнаходжень за допомогою інструменту адміністратора
  30. Лістинг 20. Опції для управління класами моделей
  31. Малюнок 3. Висновок робіт за допомогою інструменту адміністратора
  32. Лістинг 21. Виконання конфігурації видів в djproject / urls.py
  33. Лістинг 22. Файл конфігурації URL рівня додатків, urls.py
  34. Лістинг 23. jobs / urls.py: пошук index і detail
  35. Лістинг 24. djproject / urls.py: Зв'язування адрес (URL) назад в проект
  36. виконання видів
  37. Лістінг 25. jobs / views.py (v1)
  38. Лістинг 26. jobs / views.py (v2)
  39. Лістинг 27. jobs / views.py (v3)
  40. створення шаблонів
  41. Лістинг 28. Створення директорії шаблонів в settings.py
  42. Лістинг 29. Документ скелета, templates / base.html
  43. Лістинг 30. Допоміжний файл основи, templates / jobs / base.html
  44. Лістинг 31. Шаблон templates / jobs / job_list.html
  45. Лістинг 32. Сторінка templates / jobs / job_detail.html
  46. універсальні види
  47. Лістинг 33. Універсальні види в jobs / urls.py
  48. Висновок
  49. Ресурси для скачування

Середовища Web-розробки на мові Python, Частина 1

Середовищі Web-розробки Django на мові Python, від установки до закінченого Web-сайту

Серія контенту:

Цей контент є частиною # з серії # статей: Середовища Web-розробки на мові Python, Частина 1

https://www.ibm.com/developerworks/ru/library/?series_title_by=**auto**

Слідкуйте за виходом нових статей цієї серії.

Цей контент є частиною серії: Середовища Web-розробки на мові Python, Частина 1

Слідкуйте за виходом нових статей цієї серії.

Проект Django є настроюється користувачем середу розробки. Він бере початок з Web-сайту однієї онлайн-газети і був випущений як система з відкритим вихідним кодом в липні 2005 року. Головні компоненти середовища розробки Django наступні:

  • Об'єктно-реляційне відображення (object-relational mapping) для створення моделей
  • Бездоганний інтерфейс адміністратора, спеціально створений для кінцевих користувачів
  • Елегантно спроектований механізм адресування (URL)
  • Мова шаблонів, для дизайнерів
  • система кешування

Ця стаття - перша з двох статей про середовищі Web-розробки на мові Python. Друга стаття представить вам середу розробки TurboGears.

Щоб використовувати і розуміти код в даній статті, вам необхідно встановити Python і знати, як ним користуватися на початковому рівні. Перевірте, чи є у вас Python, і якої версії, набравши python -V. Мінімальною вимогою Django є версія 2.3.5, яка доступна вам на Web-сайті Python (див. Посилання в розділі ресурси в кінці статті). Вам також слід хоча б трохи бути знайомим з архітектурою MVC.

установка Django

У цій статті використовується версія у розробці Django для того, щоб скористатися перевагами останніх поліпшень, внесених в середу розробки Django. Я рекомендую вам використовувати цю версію до появи версії 0.95. Дізнайтеся про наявність останньої версії Django на його Web-сайті (знову див. Посилання в ресурсах ).

Щоб завантажити і встановити Django вам потрібно:

Лістинг 1. Завантаження та установка Django

~ / Downloads # svn co http://code.djangoproject.com/svn/django/trunk/ django_src ~ / downloads # cd django_src ~ / downloads # python setup.py install

Інструмент адміністрування Django

Після установки Django вам необхідний інструмент адміністрування Django, а саме django-admin.py, доданий в змінну оточення path. Лістинг 2 показує деякі з команд, доступних інструменту адміністратора:

Лістинг 2. Використання інструменту адміністрування Django

~ / Dev $ django-admin.py usage: django-admin.py action [options] actions: adminindex [modelmodule ...] Prints the adminindex template snippet for the given model module name (s). ... snip ... startapp [appname] Creates a Django app directory structure for the given app name in the current directory. startproject [projectname] Creates a Django project directory structure for the given project name in the current directory. validate Validates all installed models. options: -h, --help show this help message and exit --settings = SETTINGS Python path to settings module, eg "myproject.settings.main". If this is not provided, the DJANGO_SETTINGS_MODULE environment variable will be used. --pythonpath = PYTHONPATH Lets you manually add a directory the Python path, eg "/ home / djangoprojects / myproject".

Проекти та програми в Django

Щоб почати проект Django, використовуйте команду програми django-admin startproject ось так:

Лістинг 3. Створення проекту

~ / Dev $ django-admin.py startproject djproject

Показана вище команда створює директорію під назвою djproject, яка містить файли базовій конфігурації, необхідні для роботи проекту Django:

Лістинг 4. Зміст директорії djproject

__init__.py manage.py settings.py urls.py

У цьому проекті ви створите додаток для відділу зайнятості, зване "jobs." Для створення програми використовуйте скрипт manage.py, який є спеціальним для проекту скриптом в django-admin.py, в якому автоматично задається файл settings.py:

Лістинг 5. Використання manage.py з параметром startapp

~ / Dev $ cd djproject ~ / dev / djproject $ python manage.py startapp jobs

Це створює кістяк додатки з одним модулем Python для ваших моделей і іншим для ваших видів (view). Директорія jobs буде содаржать наступні файли:

Лістинг 6. Зміст директорії додатку jobs

__init__.py models.py views.py

Місцезнаходження додатки всередині проекту є чистою умовністю, створеної для нових розробників в Django, а не вимогою. Як тільки ви почнете перемішувати і зіставляти додатки в декількох проектах, ви можете помістити додатки в їх власні простору імен для модулів і зв'язати їх разом, використовуючи налаштування і головні файли URL. Але поки, виконайте наступне етапах.

Щоб Django знав про новий додатку, вам необхідно додати рядок в поле INSTALLED_APPS в файлі settings.py. Для цього додатка для відділу зайнятості потрібно додати рядок djproject.jobs:

Лістинг 7. Додавання рядка до settings.py

INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'djproject.jobs',)

створення моделі

У Django є своя власна бібліотека object-relational mapper (ORM), яка підтримує динамічний доступ до баз даних через об'єктний інтерфейс Python. Інтерфейс Python є дуже зручним і ефективним, але ви також можете відмовитися від нього і безпосередньо використовувати SQL при необхідності.

На даний момент ORM надає підтримку для баз даних PostgreSQL, MySQL, SQLite, а також Microsoft® SQL.

Це приклад використовує SQLite, в якості інтерфейсу до бази даних. SQLite є легковагої базою даних, яка потребує зміни і розташовується на диску у вигляді простого файлу. Щоб використовувати SQLite, просто встановіть бібліотеку pysqlite за допомогою інструментів установки (setuptools) (див. Додаткову інформацію про інструменти установки (setuptools) і, зокрема, про інструмент easy_install, який вам необхідно встановити окремо, в розділі ресурси ):

easy_install pysqlite

Перед тим, як працювати з моделлю, налаштуйте базу даних у файлі налаштувань. Для SQLite необхідно вказувати тільки движок і ім'я бази даних.

Лістинг 8. Конфігурація бази даних в settings.py

DATABASE_ENGINE = 'sqlite3' DATABASE_NAME = '/path/to/dev/djproject/database.db' DATABASE_USER = '' DATABASE_PASSWORD = '' DATABASE_HOST = '' DATABASE_PORT = ''

Ця програма для відділу зайнятості буде мати два типи об'єктів: Місця розташування (Locations) і Роботи (Jobs). Місцезнаходження включає в себе поля міста, штату (за бажанням), а також країни. Робота має місце розташування, посада, опис і дату публікації.

Лістинг 9. Модуль jobs / models.py

from django.db import models class Location (models.Model): city = models.CharField (maxlength = 50) state = models.CharField (maxlength = 50, null = True, blank = True) country = models.CharField (maxlength = 50) def __str __ (self): if self.state: return "% s,% s,% s"% (self.city, self.state, self.country) else: return "% s,% s"% ( self.city, self.country) class Job (models.Model): pub_date = models.DateField () job_title = models.CharField (maxlength = 50) job_description = models.TextField () location = models.ForeignKey (Location) def __str__ (self): return "% s (% s)"% (self.job_title, self.location)

Метод __str__ - це спеціальний метод класу в мові Python, який повертає строкове представлення об'єкту. Django досить широко використовує цей метод, коли відображає об'єкти в інструменті адміністратора.

Щоб побачити схему бази даних для моделі, запустіть manage.py з командою sql. Схема поки ще не буде задіяна.

Лістинг 10. Перегляд схеми бази даних за допомогою команди manage.py sql

~ / Dev / djproject $ python manage.py sql jobs BEGIN; CREATE TABLE "jobs_job" ( "id" integer NOT NULL PRIMARY KEY, "pub_date" date NOT NULL, "job_title" varchar (50) NOT NULL, "job_description" text NOT NULL, "location_id" integer NOT NULL); CREATE TABLE "jobs_location" ( "id" integer NOT NULL PRIMARY KEY, "city" varchar (50) NOT NULL, "state" varchar (50) NULL, "country" varchar (50) NOT NULL); COMMIT;

Для ініціалізації і установки моделі, запустіть команду синхронізація бази даних syncdb:

~ / Dev / djproject $ python manage.py syncdb

Відзначимо, що команда syncdb просить вас створити обліковий запис суперкористувача. Це відбувається тому, що додаток django.contrib.auth, яке надає базові засоби аутентифікації користувача, встановлено за замовчуванням в ваших налаштуваннях INSTALLED_APPS. Ім'я користувача root і пароль будуть використовуватися для реєстрації в інструменті адміністратора, описаному в наступному розділі. Пам'ятайте, що це ім'я і пароль користувача root Django, а не системи.

набори запитів

Моделі Django звертаються до бази даних через спочатку встановлений Керуючий (Manager) клас, званий objects. Наприклад, щоб вивести список всіх робіт, вам потрібно використовувати метод all, що належить менеджеру objects:

Лістинг 11. Висновок всіх робіт (jobs)

>>> from jobs.models import Job >>> for job in Job.objects.all (): ... print job

Керуючий клас також має методи фільтрації, звані filter (фільтрація) і exclude (виняток). Фільтрація отримує всі об'єкти, які підходять під умови, тоді як виняток дає всі об'єкти, що не підходять під них. Перелічені нижче запити повинні дати такі ж результати ( "gte" означає "greater than or equal," (більше або дорівнює) і "lt" означає "less than") (менше ніж).

Лістинг 12. Виняток і фільтрація робіт (jobs)

>>> from jobs.models import Job >>> from datetime import datetime >>> q1 = Job.objects.filter (pub_date__gte = datetime (2006, 1, 1)) >>> q2 = Job.objects.exclude (pub_date__lt = datetime (2006, 1, 1))

Методи filter і exclude повертають об'єкти QuerySet, які можна пов'язати в ланцюжок і які можуть навіть представляти з'єднання. Запит q4, наведений нижче, буде знаходити роботи, починаючи з 1-го січня 2006 року, в м Клівленд (Cleveland), штат Огайо:

Лістинг 13. Знову виняток і фільтрація робіт (jobs)

>>> from jobs.models import Job >>> from datetime import datetime >>> q3 = Job.objects.filter (pub_date__gte = datetime (2006, 1, 1)) >>> q4 = q3.filter (location__city__exact = " Cleveland ", ... location__state__exact =" Ohio ")

Це добре, що QuerySets ліниві. Це означає, що вони не виконуються в базі даних, поки не відбулася їхня оцінка, і завдяки чому працюють набагато швидше, ніж миттєві запити.

Ця лінощі є дуже практичною в поєднанні з розтинає (slicing) функціональністю мови Python. Замість того, щоб запитувати всі записи, а потім відсікати потрібні записи, нижченаведений код використовує зміщення (OFFSET), рівне 5, і межа (LIMIT), рівний 10, в цьому запиті SQL, досить покращуючи якість виконання.

Лістинг 14. Python-розсічення

>>> from jobs.models import Job >>> for job in Job.objects.all () [5:15] ... print job

Примітка: Використовуйте метод count, щоб зрозуміти, скільки записів знаходяться в QuerySet. Метод len в Python робить повну оцінку, а потім підраховує кількість рядів, поверненню у вигляді записів, тоді як метод count робить дійсний Підрахунок (COUNT) SQL, який набагато швидше. І ваш адміністратор баз даних подякує вас.

Лістинг 15. Підрахунок записів

>>> from jobs.models import Job >>> print "Count =", Job.objects.count () # GOOD! >>> print "Count =", len (Job.objects.all ()) # BAD!

Для більш докладної інформації, див. Розділ ресурси для посилання на "Довідник по інтерфейсу API бази даних" для Django.

інструмент адміністратора

Одне з найбільших переваг в Django - це відточений інтерфейс адміністратора. Цей інструмент був створений з урахуванням кінцевого користувача, завдяки чому надає вашим проектам відмінний засіб для введення даних.

Інструмент адміністратора являє собою додаток, яке йде разом з Django. Перед тим, як його використовувати, його необхідно встановити так само, як і додаток jobs. Спершу потрібно додати модуль програми (django.contrib.admin) в налаштування INSTALLED_APPS:

Лістинг 16. Зміни в settings.py

INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'djproject.jobs', 'django.contrib.admin',)

Щоб зробити інструмент адміністратора доступним з адреси (URL) / admin, просто розкрийте дужки коментаря в рядку, в наданому вам файлі urls.py вашого проекту. У наступному розділі буде розглядатися конфігурація URL більш докладно.

Лістинг 17. Використання urls.py, щоб іструмент адміністратора став доступним

from django.conf.urls.defaults import * urlpatterns = patterns ( '', (r '^ admin /', include ( 'django.contrib.admin.urls.admin')),)

Піложеніе адміністратора має свою модель бази даних, яку необхідно встановити. Знову використовуйте команду syncdb, щоб завершити наступне:

python manage.py syncdb

Щоб побачити інструмент адміністратора, ви можете використовувати тест-сервер, що додається до Django.

Лістинг 18. Використання тест-сервера, щоб побачити інструмент адміністратора

~ / Dev / djproject $ python manage.py runserver Validating models ... 0 errors found. Django version 0.95 (post-magic-removal), using settings 'djproject.settings' Development server is running at http://127.0.0.1:8000/ Quit the server with CONTROL-C (Unix) or CTRL-BREAK (Windows) .

Тепер ви можете переміститися в інструмент адміністратора за адресою http: // localhost: 8000 / admin і зареєструватися, використовуючи дані адміністратора, створені вами раніше. Ви помітите, що жодна з ваших моделей не доступна для користування.

Щоб відкрити доступ до класу через інструмент адміністратора, створіть для нього підклас Admin (Адміністратора). Потім ви можете налаштовувати то, як їх можна адмініструвати додаванням характеристик класів до даного підкласу. Лістинг 19 показує, як додавати клас Location (Місцезнаходження) до ІНТСРУМЕНТ адміністратора.

Лістинг 19. Добасвленіе класу Location за допомогою інструменту адміністратора

class Location (meta.Model): ... class Admin: list_display = ( "city", "state", "country")

Тепер ви можете створювати, оновлювати і видаляти записи Місцезнаходження (Location) через інтерфейс адміністратора.

Малюнок 1. Зміна місцезнаходжень за допомогою інструменту адміністратора
Середовища Web-розробки на мові Python, Частина 1   Середовищі Web-розробки Django на мові Python, від установки до закінченого Web-сайту   Серія контенту:   Цей контент є частиною # з серії # статей: Середовища Web-розробки на мові Python, Частина 1   https://www

Ви можете виводити і сортувати Записи (Records) по містам, штатах і контингентах країнам, в залежності від характеристики класу list_display.

Малюнок 2. Висновок місцезнаходжень за допомогою інструменту адміністратора

Інструмент адміністратора має велику кількість опцій для управління кожним з класів моделей. Лістинг 20 показує кілька прикладів, застосованих до класу Job:

Лістинг 20. Опції для управління класами моделей

class Job (meta.Model): ... class Admin: list_display = ( "job_title", "location", "pub_date") ordering = [ "-pub_date"] search_fields = ( "job_title", "job_description") list_filter = ( "location",)

У відповідність з вищезгаданими настройками, при виведенні записів робіт (job) будуть використовуватися: заголовок роботи (job), місцезнаходження та дата видання. Роботи будуть розташовуватися в порядку дати видання, починаючи з самого останнього (знак мінус означає - в порядку убування). Користувачі можуть знайти роботи за назвою і описом, а адміністратори можуть фільтрувати записи, виходячи з їх місцезнаходження.

Малюнок 3. Висновок робіт за допомогою інструменту адміністратора

Проектування своєї схеми URL

Система передачі адрес URL в Django використовує модулі конфігурацій регулярних виразів, які відображають строкові шаблони URL в методах мови Python, звані видами. Ця система дозволяє абсолютно чітко відокремлювати адреси URL від коду, що робить їх максимально легкими для управління.

Модуль urls.py створюється і визначається як початку відліку конфігурації URL (за допомогою значення ROOT_URLCONF в модулі settings.py). Єдина вимога для файлу конфігурації URL полягає в тому, що він повинен містити об'єкт, який визначає шаблони, звані urlpatterns.

Додаток управління роботою (job) буде починатися з index-видом і детальним (detail) видом, які доступні через справжні відображення URL:

  • / Jobs index-вид: Показує останні 10 робіт
  • / Jobs / 1 детальний вид: Показує роботи з одним ідентифікаційним номером (ID)

Обидва ці види (index і детальний вид) будуть виконані в модулі, званому views.py в додатку робіт. Виконання цієї конфігурації у файлі urls.py проекту будуть виглядати наступним чином:

Лістинг 21. Виконання конфігурації видів в djproject / urls.py

from django.conf.urls.defaults import * urlpatterns = patterns ( '', (r '^ admin /', include ( 'django.contrib.admin.urls.admin')), (r '^ jobs / $', 'djproject.jobs.views.index'), (r '^ jobs / (? P <job_id> \ d +) / $', 'djproject.jobs.views.detail'),)

Відзначте шматочок коду <job_id>. Це знадобитися пізніше.

На практиці найкраще - витягувати шаблони URL, спеціальні для додатків, і поміщати їх в сам додаток. Це відокремлює додаток від проекту і дозволяє повторно його використовувати. Файл конфігурації URL рівня додатків для робіт (jobs) будуть виглядати так:

Лістинг 22. Файл конфігурації URL рівня додатків, urls.py

from django.conf.urls.defaults import * urlpatterns = patterns ( '', (r '^ $', 'djproject.jobs.views.index'), (r '^ (? P <job_id> \ d +) / $ ',' djproject.jobs.views.detail '),)

З тих пір, як методи видів виходять з одного модуля, для настройки djproject.jobs.views як кореневого імені модуля можна використовувати перший аргумент, і Django використовує його для того, щоб шукати методи index і detail:

Лістинг 23. jobs / urls.py: пошук index і detail

from django.conf.urls.defaults import * urlpatterns = patterns ( 'djproject.jobs.views', (r '^ $', 'index'), (r '^ (? P <object_id> \ d +) / $' , 'detail'),)

Щоб зв'язати в одне ціле адреси (URL), перерахованих вище робіт (job), тому в проект, необхідно використовувати функцію include. Адреси (URL) рівня додатків тепер пов'язані в розділі / jobs:

Лістинг 24. djproject / urls.py: Зв'язування адрес (URL) назад в проект

from django.conf.urls.defaults import * urlpatterns = patterns ( '', (r '^ admin /', include ( 'django.contrib.admin.urls.admin')), (r '^ jobs /', include ( 'djproject.jobs.urls')),)

Якщо ви спробуєте увійти на початкову (index) сторінку (http: // localhost: 8000 / jobs) на цьому етапі, використовуючи тест-сервер, ви отримаєте помилку, так як вид, який буде називатися (djproject.jobs.views.index) , ще не існує.

виконання видів

Вид являє собою простий метод мови Python, який приймає об'єкт відгуку і відповідає за:

  • Будь-яку бізнес-логіку (явно або неявно)
  • Контекстний словник з даними для шаблону
  • Візуалізація (rendering) шаблону з контекстом
  • Об'єкт відгуку, який пропускає відрендерені (rendered) результати назад в середу розробки

В Django викликаний метод мови Python, коли запитується URL, називається виглядом, а сторінка, закаченная і відрендерене, видом називається шаблоном. З цієї причини, команда розробників Django говорила про Django, як про середовище розробки з MVT (model-view-template - модель-вид-шаблон). З іншого боку, TurboGears називає свої методи контролерами, а відрендерені шаблони видами, що дійсно дозволяє використовувати абревіатуру MVC. Різниця лише у використанні слів, але зміст залишається тим же.

Найпростіший з можливих видів повертає об'єкт HttpResponse (http відгук), ініціалізований в строковий тип. створіть наступний метод і зробіть з / jobs HTTP-запит, щоб перевірити, що ваші файли urls.py і views.py правильно налаштовані.

Лістінг 25. jobs / views.py (v1)

from django.http import HttpResponse def index (request): return HttpResponse ( "Job Index View")

Наступний код отрімує останні 10 робіт (job), рендерить їх через шаблон и Повертає відгук. Це не буде працювати без файлу шаблоном з наступного розділу .

Лістинг 26. jobs / views.py (v2)

from django.template import Context, loader from django.http import HttpResponse from jobs.models import Job def index (request): object_list = Job.objects.order_by ( '- pub_date') [: 10] t = loader.get_template ( ' jobs / job_list.html ') c = Context ({' object_list ': object_list,}) return HttpResponse (t.render (c))

У наведеному вище коді шаблон названий, як строковий jobs / job_list.html Рендеринг шаблону відбувається в контексті списку робіт (job), названому object_list. Відрендерене шаблон рядки потрапляє в конструктор HTTPResponse, який відправляється назад в клієнт запиту за допомогою середовища розробки.

Етапи завантаження шаблону, що створюють контекст і повертають новий об'єкт відгуку, переміщені нижче за допомогою зручного методу, званого render_to_response. Також новим є метод детального (detail) виду, який використовує зручний для цього метод get_object_or_404, щоб здійснити вибірку об'єкта Job, використовуючи наведені аргументи. Якщо об'єкт не знайдено, то видається помилка 404. Ці два методи позбавляють програму від великої кількості стандартних кодів, використовуваних в більшості Web-додатків.

Лістинг 27. jobs / views.py (v3)

from django.shortcuts import get_object_or_404, render_to_response from jobs.models import Job def index (request): object_list = Job.objects.order_by ( '- pub_date') [: 10] return render_to_response ( 'jobs / job_list.html', { ' object_list ': object_list}) def detail (request, object_id): job = get_object_or_404 (Job, pk = object_id) return render_to_response (' jobs / job_detail.html ', {' object ': job})

Відзначимо, що detail бере object_id як аргумент. Цей номер згадувався раніше, після URL-шляху / jobs / к файлу робіт (job) urls.py. Він проходить далі в метод get_object_or_404 в якості первинного ключа (primary key - pk).

Наведені вище види все ще не будуть працювати, тому що шаблони, які вони завантажують і Рендер (jobs / job_list.html і jobs / job_detail.html) ще не існують.

створення шаблонів

Django надає просту мову шаблонів, спроектований для швидкого рендеринга і простоти використання. Шаблони Django створюються з простого тексту, вбудованого в {{змінні}} і {% теги%}. Потім відбувається заміна змінних на значення, які вони несуть. Теги використовуються в якості основи логіки управління. Шаблони можна використовувати для генерування будь-якого формату текстів, включаючи HTML, XML, CSV і простий текст.

Перше, що потрібно зробити - це визначити місцезнаходження шаблонів. Для простоти, створіть директорію для шаблонів всередині директорії djproject і додайте його шлях в рядку TEMPLATE_DIRS файлу settings.py:

Лістинг 28. Створення директорії шаблонів в settings.py

TEMPLATE_DIRS = ( '/ path / to / devdir / djproject / templates /',)

Шаблони в Django підтримують концепцію, яка називається спадкуванням шаблонів, яка дозволяє дизайнерам сайтів створювати однорідний вигляд і функціональність без повторення змісту в кожному з шаблонів. Ви можете використовувати спадкування, визначаючи документ скелета, або основи, з блочними тегами. Ці блокові теги заповнюються шаблонами сторінок зі змістом. Цей приклад показує скелет коду на HTML з блоками, званими title, extrahead і content:

Лістинг 29. Документ скелета, templates / base.html

<! DOCTYPE html PUBLIC "- // W3C // DTD XHTML 1.0 Transitional // EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns = "http : //www.w3.org/1999/xhtml "xml: lang =" en "lang =" en "> <head> <title> Company Site: {% block title%} Page {% endblock%} </ title > {% block extrahead%} {% endblock%} </ head> <body> {% block content%} {% endblock%} </ body> </ html>

Щоб додаток було окремо від проекту, використовуйте допоміжний файл основи, в якості основи для всіх файлів сторінок додатку Job. Для цього прикладу, помістіть CSS додатки в файл основи для спрощення. У реальному додатку, з добре сконфігурованим Web-сервером, візьміть даний CSS і помістіть його в статичний файл, який обслуговується Web-сервером.

Лістинг 30. Допоміжний файл основи, templates / jobs / base.html

{% Extends "base.html"%} {% block extrahead%} <style> body {font-style: arial; } H1 {text-align: center; } .Job .title {font-size: 120%; font-weight: bold; } .Job .posted {font-style: italic; } </ Style> {% endblock%}

Спочатку, тест-сервер в Django не обслуговує статичні файли, тому що цю роботу повинен виконувати Web-сервер. Якщо під час розробки ви захочете, щоб Django працював з картинками, листами стилів і так далі, тоді див. Посилання в ресурсах про те, як включити цю можливість.

Тепер створіть 2 шаблони сторінок для завантаження і рендеринга. Шаблон jobs / job_list.html просто виконує ітерацію через object_list (список об'єктів), який він одержує через контекст, що видається index-видом, а також відображає посилання на кожну зі сторінок з докладною інформацією про записи.

Лістинг 31. Шаблон templates / jobs / job_list.html

{% Extends "jobs / base.html"%} {% block title%} Job List {% endblock%} {% block content%} <h1> Job List </ h1> <ul> {% for job in object_list% } <li> <a href="{{ job.id }}"> {{job.job_title}} </a> </ li> {% endfor%} </ ul> {% endblock%}

Сторінка jobs / job_detail.html показує одну запис, звану job (робота):

Лістинг 32. Сторінка templates / jobs / job_detail.html

{% Extends "jobs / base.html"%} {% block title%} Job Detail {% endblock%} {% block content%} <h1> Job Detail </ h1> <div class = "job"> <div class = "title"> {{job.job_title}} - {{job.location}} </ div> <div class = "posted"> Posted: {{job.pub_date | date: "dMY"}} </ div> <div class = "description"> {{job.job_description}} </ div> </ div> {% endblock%}

Мова шаблонів в Django був спроектований з обмеженими функціональними можливостями. Ця обмеженість дозволяє зберігати простоту шаблонів для непрограмістів і захищає програмістів від використання бізнес-логіки там, де її не повинно бути, в шарі уявлення. Див. Посилання на документацію з мови шаблонів в ресурсах .

універсальні види

Django йде разом з чотирма наборами універсальних видів, які дозволяють розробникам створювати додатки, такі типовим шаблоном:

  • Сторінки зі списком / подробицями (як вищенаведений приклад)
  • Дроблення записів за датою (корисно для новинних сайтів і блогів)
  • Створення, оновлення та видалення - СОУ (Creation, update, and deletion - CRUD) об'єктів
  • Простий прямий рендеринг шаблонів або просте HTTP-перенаправлення

Замість створення методів стандартних видів, вся бізнес-логіка знаходиться в файлі urls.py і управляється за допомогою методів універсальних видів, підтримуваних Django.

Лістинг 33. Універсальні види в jobs / urls.py

from django.conf.urls.defaults import * from jobs.models import Job info_dict = { 'queryset': Job.objects.all (),} urlpatterns = patterns ( 'django.views.generic.list_detail', (r '^ $ ',' object_list ', info_dict), (r' ^ (? P <object_id> \ d +) / $ ',' object_detail ', info_dict),)

Три важливих зміни в даному файлі urls.py:

  • Об'єкт відображення info_dict проходить через набір запитів, щоб був відкритий доступ для Jobs.
  • Він використовує django.views.generic.list_detail замість djproject.jobs.views.
  • Дійсно викликані види - це object_list і object_detail.

Цей проект слід деяким вимогам, щоб перехід до універсальних видів стався автоматично:

  • Універсальний детальний (detail) вид очікує аргумент з ім'ям object_id.
  • Шаблони слідують назвою: app_label / model_name _list.html (jobs / job_list.html) app_label / model_name _detail.html (jobs / job_detail.html)
  • Шаблон списку управляє списком з ім'ям object_list.
  • Детальний шаблон управляє об'єктом з ім'ям object.

Більше опцій можна задати через info_dict, включаючи значення paginate_by, яке визначає число об'єктів на сторінці.

Висновок

Наступна стаття цього випуску буде розглядати TurboGears, інше середовище Web-розробки на мові Python, і буде порівнювати його з Django.

Ресурси для скачування

Схожі тими

  • оригінал статті Python Web frameworks, Part 1: Develop for the Web with Django and Python .
  • Читайте огляд MVC-архітектури в Wikipedia.
  • " Швидкісне створення Web-додатків з Ruby on Rails (Fast-track your Web apps with Ruby on Rails) "(DeveloperWorks, червень 2005 року) показує те, як Ruby on Rails створює Web-додатки.
  • Python.org є домашньою сторінкою мови програмування Python, де ви можете знайти посилання для скачівнія інтерпретатора мови Python і стандартні бібліотеки.
  • Керівництво по мові Python допоможе вам освоїтися з мовою Python.
  • DjangoProject.com є домашньою сторінкою середовища розробки Django.В документацію входить:
    • Як встановлювати Django (How to install Django) , Де показано, як налаштовувати Django на машині розробника
    • Довідник по інтерфейсу API бази даних (Database API reference) , Керівництво по використанню ORM-бібліотеки в Django
    • Мова шаблонів в Django (Django template language) , Просте керівництво для програмістів
    • Як обслуговувати статичні файли (How to serve static files) , Представляє, як налаштовувати Django, щоб обслуговувати статичні файли під час розробки (не робіть цього при випуску продукту)
    • Як використовувати Django з mod_python (How to use Django with mod_python) , Керівництво по комбінуванню Django з Apache за допомогою модуля mod_python
    • Універсальні види (Generic views) , Де показано, як виконувати звичайні зразки Web-додатків на багато швидше за допомогою універсальних видів в Django
  • Пакети створення і поширення з інструмет установки (Building and Distributing Packages with setuptools) показують як встановлювати setuptools разом з easy_install, як частина пакету Python Eggs.
  • Підказки по продуктивності Django (Django performance tips) показують, як виправляти проблеми з трафіком за допомогою Django.
  • на сайті developerWorks в розділі Linux ви можете знайти більше джерел для Linux-розробників.
  • Доступне пробне ПО IBM для скачування прямо з сайту developerWorks, щоб ви могли створювати такі розробки під Linux.

Підпішіть мене на ПОВІДОМЛЕННЯ до коментарів

Com/developerworks/ru/library/?

Уважаемые партнеры, если Вас заинтересовала наша продукция, мы готовы с Вами сотрудничать. Вам необходимо заполнить эту форму и отправить нам. Наши менеджеры в оперативном режиме обработают Вашу заявку, свяжутся с Вами и ответят на все интересующее Вас вопросы.

Или позвоните нам по телефонам: (048) 823-25-64

Организация (обязательно) *

Адрес доставки

Объем

Как с вами связаться:

Имя

Телефон (обязательно) *

Мобильный телефон

Ваш E-Mail

Дополнительная информация: