Главная страница

Книга Изучаем Python


Скачать 4.68 Mb.
НазваниеКнига Изучаем Python
Дата10.12.2022
Размер4.68 Mb.
Формат файлаpdf
Имя файлаErik_Metiz_Izuchaem_Python_Programmirovanie_igr_vizualizatsia_da.pdf
ТипКнига
#837531
страница42 из 53
1   ...   38   39   40   41   42   43   44   45   ...   53
УПРАЖНЕНИЯ
17-1 . Другие языки: измените вызов API в программе python_repos .py так, чтобы на диа- грамме отображались самые популярные проекты на других языках . Попробуйте такие язы- ки, как JavaScript, Ruby, C, Java, Perl, Haskell и Go .
17-2 . Активные обсуждения: на основании данных из hn_submissions .py постройте столбцо- вую диаграмму самых активных обсуждений, проходящих на Hacker News . Высота каждого столбца должна соответствовать количеству комментариев к каждой статье . Метка столбца должна включать заголовок статьи, а сам столбец должен служить ссылкой на страницу обсуждения этой публикации .
17-3 . Тестирование python_repos .py: в python_repos .py для проверки успешности вызова
API выводится значение status_code . Напишите программу test_python_repos .py, которая использует модуль unittest для проверки того, что значение status_code равно 200 . При- думайте другие условия, которые могут проверяться при тестировании, — например, что количество возвращаемых элементов совпадает с ожидаемым, а общее количество репози- ториев превышает некоторый порог .

378 Глава 17 • Работа с API
Итоги
В этой главе вы узнали, как использовать API для написания программ, авто- матически собирающих необходимые данные и использующих полученную информацию для создания визуализации. Мы использовали GitHub API для получения информации о самых популярных проектах Python на GitHub, а также в общих чертах рассмотрели API Hacker News. Вы узнали, как с помощью пакета requests автоматически выдать вызов API к GitHub и как обработать результаты этого вызова. Также были описаны некоторые средства конфигурации Pygal, по- зволяющие выполнить дополнительную настройку внешнего вида создаваемых диаграмм.
В последнем проекте мы используем Django для построения веб-приложения.

Проект 3
Веб-приложения

18
Знакомство с Django
Современные веб-сайты в действительности представляют собой многофункцио- нальные приложения, достаточно близкие к полноценным приложениям для настольных систем. Python содержит богатый набор инструментов для постро- ения веб-приложений. В этой главе вы научитесь использовать Django (http://
djangoproject.com/) для построения проекта Learning Log — сетевой журнальной системы для отслеживания информации, полученной вами по определенной теме.
Мы напишем спецификацию для этого проекта, а затем определим модели для данных, с которыми будет работать приложение. Мы воспользуемся администра- тивной системой Django для ввода некоторых начальных данных, а затем научимся писать представления и шаблоны, на базе которых Django будет строить страницы нашего сайта.
Django представляет собой веб-инфраструктуру — набор инструментов для постро- ения интерактивных веб-сайтов. Django может реагировать на запросы страниц, упрощает чтение и запись информации в базы данных, управление пользователями и многие другие операции. В главах 19 и 20 мы доработаем проект Learning Log, а затем развернем его на сервере, чтобы вы (и ваши друзья) могли использовать их.
Подготовка к созданию проекта
В начале работы над проектом необходимо описать проект в спецификации. Затем вы создадите виртуальную среду для построения проекта.
Написание спецификации
В полной спецификации описываются цели проекта, его функциональность, а также внешний вид и интерфейс пользователя. Как и любой хороший проект или бизнес-план, спецификация должна сосредоточиться на самых важных аспек- тах и обеспечивать планомерную разработку проекта. Здесь мы не будем писать полную спецификацию, а сформулируем несколько четких целей, которые будут задавать направление процесса разработки. Вот как выглядит спецификация:
Мы напишем веб-приложение с именем Learning Log, при помощи которого пользователь сможет вести журнал интересующих его тем и создавать записи в журнале во время изучения каждой темы . Домашняя страница Learning Log содержит описание сайта и приглашает пользователя заре- гистрироваться либо ввести свои учетные данные . После успешного входа пользователь получает

Подготовка к созданию проекта 381
возможность создавать новые темы, добавлять новые записи, читать и редактировать существу- ющие записи .
Во время изучения нового материала бывает полезно вести журнал того, что вы узнали, — записи пригодятся для контроля и возвращения к необходимой инфор- мации. Хорошее приложение повышает эффективность этого процесса.
Создание виртуальной среды
Для работы с Django необходимо сначала создать виртуальную среду для работы.
Виртуальная среда представляет собой подраздел системы, в котором вы можете устанавливать пакеты в изоляции от всех остальных пакетов Python. Отделение библиотек одного проекта от других проектов принесет пользу при развертывании
Learning Log на сервере в главе 20.
Создайте для проекта новый каталог с именем learning_log
, перейдите в этот каталог в терминальном режиме и создайте виртуальную среду. Если вы работаете в Python 3, то сможете создать виртуальную среду следующей командой:
learning_log$ python -m venv ll_env
learning_log$
Команда запускает модуль venv и использует его для создания виртуальной среды с именем ll_env
. Если этот способ сработал, переходите к разделу «Активизация виртуальной среды» на с. 382. Если что-то не получилось, прочитайте следующий раздел — «Установка virtualenv».
Установка virtualenv
Если вы используете более раннюю версию Python или ваша система не настроена для правильного использования модуля venv
, установите пакет virtualenv
. Уста- новка virtualenv выполняется следующей командой:
$ pip install --user virtualenv
Возможно, вам придется использовать слегка измененную версию этой команды.
(Если вы еще не использовали pip
, обратитесь к разделу «Установка пакетов Python с использованием pip» на с. 227.)
ПРИМЕЧАНИЕ
Если вы используете Linux, но и этот способ не сработал, установите virtualenv при помощи менед- жера пакетов своей системы . Например, в Ubuntu для установки virtualenv используется команда sudo apt-get install python-virtualenv .
Перейдите в каталог learning_log в терминальном окне и создайте виртуальную среду следующей командой:
learning_log$ virtualenv ll_env
New python executable in ll_env/bin/python
Installing setuptools, pip...done.
learning_log$

382 Глава 18 • Знакомство с Django
ПРИМЕЧАНИЕ
Если в вашей системе установлено несколько версий Python, укажите версию, которая должна ис- пользоваться virtualenv . Например, команда virtualenv ll_env --python=python3 создаст виртуальную среду, которая использует Python 3 .
Активизация виртуальной среды
После того как виртуальная среда будет создана, ее необходимо активизировать следующей командой:
learning_log$ source ll_env/bin/activate

(ll_env)learning_log$
Команда запускает сценарий activate из каталога ll_env/bin
. Когда среда активизирует- ся, ее имя выводится в круглых скобках ; теперь вы можете устанавливать пакеты в среде и использовать те пакеты, что были установлены ранее. Пакеты, установлен- ные в ll_env
, будут доступны только в то время, пока среда остается активной.
ПРИМЕЧАНИЕ
Если вы работаете в системе Windows, используйте команду ll_env\Scripts\activate (без слова source) для активизации виртуальной среды .
Чтобы завершить использование виртуальной среды, введите команду deactivate
:
(ll_env)learning_log$ deactivate
learning_log$
Среда также становится неактивной при закрытии терминального окна, в котором она работает.
Установка Django
После того как вы создали свою виртуальную среду и активизировали ее, устано- вите Django:
(ll_env)learning_log$ pip install Django
Installing collected packages: Django
Successfully installed Django
Cleaning up...
(ll_env)learning_log$
Так как вы работаете в виртуальной среде, эта команда выглядит одинаково во всех системах. Использовать флаг
--user не нужно, как и использовать более длинные команды вида python
-m pip install
имя_пакета.
Помните, что с Django можно работать только в то время, пока среда остается активной.
Создание проекта в Django
Не выходя из активной виртуальной среды (пока ll_env выводится в круглых скобках), введите следующие команды для создания нового проекта:

Подготовка к созданию проекта 383

(ll_env)learning_log$ django-admin.py startproject learning_log .

(ll_env)learning_log$ ls
learning_log ll_env manage.py

(ll_env)learning_log$ ls learning_log
__init__.py settings.py urls.py wsgi.py
Команда  приказывает Django создать новый проект с именем learning_log
Точка в конце команды создает новый проект со структурой каталогов, которая упрощает развертывание приложения на сервере после завершения разработки.
ПРИМЕЧАНИЕ
Не забывайте про точку, иначе у вас могут возникнуть проблемы с конфигурацией при разверты- вании приложения . А если вы все же забыли, удалите созданные файлы и папки (кроме ll_env) и снова выполните команду .
Команда ls
(
dir в Windows)  показывает, что Django создает новый каталог с име- нем learning_log
. Также создается файл manage .py
— короткая программа, которая получает команды и передает их соответствующей части Django для выполнения.
Мы используем эти команды для управления такими задачами, как работа с базами данных и запуск серверов.
В каталоге learning_log находятся четыре файла , важнейшими из которых явля- ются файлы settings .py
, urls .py и wsgi .py
. Файл settings .py определяет то, как Django взаимодействует с вашей системой и управляет вашим проектом. Мы изменим некоторые из существующих настроек и добавим несколько новых настроек в ходе разработки проекта. Файл urls .py сообщает Django, какие страницы следует строить в ответ на запросы браузера. Файл wsgi .py помогает Django предоставлять создан- ные файлы (имя файла является сокращением от «Web Server Gateway Interface»).
Создание базы данных
Так как Django хранит бульшую часть информации, относящейся к проекту, в базе данных, необходимо создать базу данных, с которой Django сможет работать. Чтобы создать базу данных для проекта Learning Log, введите следующую команду (все еще не покидая активной среды):
(ll_env)learning_log$ python manage.py migrate

Operations to perform:
Synchronize unmigrated apps: messages, staticfiles
Apply all migrations: contenttypes, sessions, auth, admin
Applying sessions.0001_initial...
OK

(ll_env)learning_log$ ls
db.sqlite3 learning_log ll_env manage.py
Каждое изменение базы данных называется миграцией. Первое выполнение коман- ды migrate приказывает Django проверить, что база данных соответствует текуще- му состоянию проекта. Когда мы впервые выполняем эту команду в новом проекте с использованием SQLite (вскоре мы расскажем о SQLite более подробно), Django создает новую базу данных за нас. В точке  Django сообщает о создании таблиц базы данных, необходимых для хранения информации, используемой в проекте

384 Глава 18 • Знакомство с Django
(
Synchronize unmigrated apps
), а затем проверяет, что структура базы данных со- ответствует текущему коду (
Apply all migrations
).
Выполнение команды ls показывает, что Django создает другой файл с именем db .sqlite3
. SQLite — база данных, работающая с одним файлом; она идеально подходит для написания простых приложений, потому что вам не нужно особенно следить за управлением базой данных.
Просмотр проекта
Убедимся в том, что проект был создан правильно. Введите команду runserver
:
(ll_env)learning_log$ python manage.py runserver
Performing system checks...

System check identified no issues (0 silenced).
July 15, 2015 - 06:23:51

Django version 1.8.4, using settings 'learning_log.settings'

Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
Django запускает сервер, чтобы вы могли просмотреть проект в своей системе и проверить, как он работает. Когда вы запрашиваете страницу, вводя URL в бра- узере, сервер Django отвечает на запрос; для этого он строит соответствующую страницу и отправляет страницу браузеру.
В точке  Django проверяет правильность созданного проекта; в точке  выво- дится версия Django и имя используемого файла настроек; в точке  возвращается
URL-адрес, по которому доступен проект. URL http://127.0.0.1:8000/ означает, что проект ведет прослушивание запросов на порте 8000 локального хоста (localhost), то есть вашего компьютера. Термином «локальный хост» обозначается сервер, который обрабатывает только запросы вашей системы; он не позволяет никому другому просмотреть разрабатываемые страницы.
Теперь откройте браузер и введите URL http://localhost:8000/ — или
http://127.0.0.1:8000/, если первый адрес не работает. Вы увидите нечто похожее на рис. 18.1 — страницу, которую создает Django, чтобы сообщить вам, что все пока работает правильно. Пока не завершайте работу сервера (но, когда вы захотите прервать ее, это можно сделать нажатием клавиш Ctrl+C).
ПРИМЕЧАНИЕ
Если вы получаете сообщение об ошибке «Порт уже используется», прикажите Django исполь- зовать другой порт; для этого введите команду python manage .py runserver 8001 и продолжайте перебирать номера портов по возрастанию, пока не найдете открытый порт .
УПРАЖНЕНИЯ
18-1 . Новые проекты: чтобы лучше понять, что делает Django, постройте пару пустых проектов и посмотрите, что будет создано . Создайте новый каталог с простым именем типа InstaBook или FaceGram (за пределами каталога learning_log), перейдите в этот ка- талог в терминальном окне и создайте виртуальную среду . Установите Django и выпол- ните команду django-admin .py startproject instabook . (обратите внимание на точку в конце команды) .

Начало работы над приложением 385
Просмотрите файлы и каталоги, созданные командой, и сравните их с файлами и ката- логами Learning Log . Проделайте это несколько раз, пока не начнете хорошо понимать, что именно создает Django при создании нового проекта, а затем удалите каталоги про- ектов .
Рис. 18.1. Пока все работает правильно
Начало работы над приложением
Проект Django представляет собой группу отдельных приложений, совместная работа которых обеспечивает работу проекта в целом. Пока мы создадим одно приложение, которое будет выполнять бульшую часть работы в нашем проекте.
Другое приложение для управления учетными записями пользователей будет до- бавлено в главе 19.
К этому моменту команда runserver должна продолжать работу в терминальном окне, которое вы открыли ранее. Откройте новое терминальное окно (или вкладку) и перейдите в каталог, содержащий manage .py
. Активизируйте виртуальную среду и выполните команду startapp
:
learning_log$ source ll_env/bin/activate
(ll_env)learning_log$ python manage.py startapp learning_logs

(ll_env)learning_log$ ls
db.sqlite3 learning_log learning_logs ll_env manage.py

(ll_env)learning_log$ ls learning_logs/
admin.py __init__.py migrations models.py tests.py views.py
Команда startapp
имя_приложения приказывает Django создать инфраструктуру, необходимую для построения приложения. Заглянув сейчас в каталог проекта, вы найдете в нем новый подкаталог с именем learning_logs
. Откройте этот каталог, чтобы увидеть, какие файлы были созданы Django . Самые важные файлы в этом каталоге — models .py
, admin .py и views .py
Мы воспользуемся файлом models .py для определения данных, которыми нуж- но управлять в нашем приложении. К файлам admin .py и views .py мы вернемся позднее.

386 Глава 18 • Знакомство с Django
Определение моделей
Ненадолго задумаемся, какие данные нам понадобятся. Каждый пользователь создает набор тем в своем журнале. Каждая запись, которую он сделает, будет при- вязана к определенной теме, а записи будут выводиться в текстовом виде. Также необходимо хранить временну́ю метку каждой записи, чтобы пользователь знал, когда эта запись была создана.
Откройте файл models .py и просмотрите его текущее содержимое:
models.py
from django.db import models
# Создайте здесь свои модели.
Модуль с именем models импортируется автоматически, и нам предлагается создать свои модели. Модель сообщает Django, как работать с данными, которые будут хра- ниться в приложении. С точки зрения кода модель представляет собой обычный класс; она содержит атрибуты и методы, как и все остальные классы, рассматри- вавшиеся нами ранее. Вот как выглядит модель тем обсуждения, которые будут сохраняться пользователями:
from django.db import models class Topic(models.Model):
"""Тема, которую изучает пользователь"""
 text = models.CharField(max_length=200)
 date_added = models.DateTimeField(auto_now_add=True)
 def __str__(self):
"""Возвращает строковое представление модели."""
return self.text
Мы создали класс с именем
Topic
, наследующий от
Model
— родительского класса, включенного в Django и определяющего базовую функциональность модели. Класс
Topic содержит всего два атрибута: text и date_added
Атрибут text содержит данные
CharField
— блок данных, состоящий из символов, то есть текст . Атрибуты
CharField могут использоваться для хранения неболь- ших объемов текста: имен, заголовков, названий городов и т. д. При определении атрибута
CharField необходимо сообщить Django, сколько места нужно зарезер- вировать для него в базе данных. В данном случае задается максимальная длина max_length
, равная 200 символам; этого должно быть достаточно для хранения большинства имен тем.
Атрибут date_added содержит данные
DateTimeField
— блок данных для хранения даты и времени . Аргумент auto_add_now=True приказывает Django автоматически присвоить этому атрибуту текущую дату и время каждый раз, когда пользователь создает новую тему.
ПРИМЕЧАНИЕ
Полный список всех полей, которые могут использоваться в модели, приведены в документе Django
Model Field Reference по адресу https://docs .djangoproject .com/en/1 .8/ref/models/fields/ . Возможно,

Начало работы над приложением
1   ...   38   39   40   41   42   43   44   45   ...   53


написать администратору сайта