Диплом: Создание web-сервисов средствами стека технологий Django+Python3.x+Nginx+Gunicorn+PostgreSQL

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
2
Оглавление
ВВЕДЕНИЕ .............................................................................................................. 3
1. Глава. Теоретическое исследование заявленного стека технологий ............. 5
1.1. История развития, достоинства и недостатки ЯП Python и библиотеки
Django .................................................................................................................... 5
1.2 Обзор PostgreSQL. Преимущества перед конкурентами ......................... 11
1.3 История разработки Nginx и Gunicorn и обзор их работы....................... 16
2. Глава. Поэтапное составление проекта web-сервиса .................................... 22
2.1 Назначение и характеристики создаваемого web-сервиса ...................... 22
2.2 Создание UML-диаграммы проекта ........................................................... 24
2.3 Проектирование базы данных .................................................................... 29
3. Глава. Реализация проекта ............................................................................... 39
3.1 Описание алгоритма работы web-сервиса ................................................. 39
3.2 Настройка связки Nginx и Gunicorn ........................................................... 44
3.3 Размещение web сервиса на сервере .......................................................... 51
Заключение ............................................................................................................ 58
СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ .................................................. 60
3
ВВЕДЕНИЕ
С момента своего зарождения, интернет стремительно развивался и
охватывал всё большие сферы деятельности человека. Сеть, изначально
создаваемая для нужд военной инфраструктуры, очень быстро превратилась
в глобальную «паутину» в которой можно найти всё, начиная от научных
работы знаменитых учёных, учебных пособий, оцифрованных копий древних
книг и сохранившимися видеозаписями выступлений значимых
исторических личностей, заканчивая развлекательным контентом и
бесполезным информационным мусором.
И всё же ЭВМ и интернет должны приносить пользу, во всяком случае
так планировалось изначально. В связи с этим, регулярно создаются
программы, значительно упрощающие жизнь и работу людей. Но у подобных
приложений есть существенный недостаток – их необходимо устанавливать
на ПК, и они недоступны на других компьютерах. Иными словами, если
пользователь забыл свой ноутбук, с установленным программой-
ежедневником, дома, то придя на работу посмотреть свои записи или
добавить новые он не сможет. Это не удобно, и что бы исправить такой
недостаток, можно воспользоваться web-сервисами, которые бурно
развиваются в последние годы и по сравнению с десктопными
приложениями, доступны с любых устройству без предварительной
установки, лишь бы был доступ в интернет.
Актуальность темы исследования заключается в том, что web -сервисы
приобретают всё большую популярность, постоянно развиваются и
становятся более функциональными. Для их создания и поддержки
необходимы технологии, позволяющие быстро, качественно и чисто
написать код, а также надёжно сохранять данные пользователей. Всем этим
требованиям отвечает выбранные мною стек технологий.
Объект исследования - web -сервис.
4
Предмет исследования – web-сервис, написанный на Python и
библиотеке Django, с использованием PostgreSQL.
Цель работы – получить практические навыки разработки web-
сервисов с помощью, указанного в теме работы, стека технологий.
Задачи работы:
1) Изучение Python3.x и библиотеки Django
2) Изучение объектно-реляционной системы управления базами данных
PostgreSQL
3) Изучение web -сервера Nginx и http-сервера Gunicorn
4) Создание UML – диаграммы проекта
5) Создание ERдиаграммы базы данных
6) Написание кода проекта
Практическая значимость работы заключается в том, что в результате
её выполнения, будут получены навыки, необходимые для дальнейшего
профессионального роста и развития, а также готовый, корректно
функционирующий продукт (web -сервис), который можно прикрепить к
портфолио при трудоустройстве.
При написании ВКР были использованы книги за авторством
следующих писателей: Сузи Роман, Марк Лутц, Билл Любанович, Лучано
Ромальо, Дэвид Бизли и Браин Джонс, Роберт Седжвик, Кевин Уэйн, Роберт
Дондеро, Даниель Рубио, Владимир Дронов, Адриан Головатый, Джейкоб
Каплан-Мосс, Марти Алчин, Джефф Форсье, Уэсли Чан, Александр
Васильев, Мартин Грабер, Евгений Моргунов, Билл Карвин, Джеймс Р.
Грофф, Пол Н. Вайнберг, Эндрю Дж. Оппель.
Так же использовались различные статьи, доклады и видеозаписи с
конференций и обучающих семинаров.
5
1. Глава. Теоретическое исследование заявленного стека
технологий
1.1. История развития, достоинства и недостатки ЯП Python и
библиотеки Django
Разработка языка Python[10] была начата в конце 1980-х годов
сотрудником голландского института CWI Гвидо ван Россумом. Для
распределённой ОС Amoeba требовался расширяемый скриптовый язык, и
Гвидо начал писать Python на досуге, позаимствовав некоторые наработки
для языка ABC (Гвидо участвовал в разработке этого языка,
ориентированного на обучение программированию). В феврале 1991 года
Гвидо опубликовал исходный текст в группе новостей alt.sources. С самого
начала Python проектировался как объектно-ориентированный язык.
Наличие дружелюбного, отзывчивого сообщества пользователей
считается наряду с дизайнерской интуицией Гвидо одним из факторов успеха
Python. Развитие языка происходит согласно чётко регламентированному
процессу создания, обсуждения, отбора и реализации документов PEP (англ.
Python Enhancement Proposal) — предложений по развитию Python [3].
3 декабря 2008 года, после длительного тестирования, вышла первая
версия Python 3000 (или Python 3.0, также используется сокращение Py3k). В
Python 3000 устранены многие недостатки архитектуры с максимально
возможным (но не полным) сохранением совместимости со старыми
версиями Python. На сегодня поддерживаются обе ветви развития (Python 3.x
и 2.x).
Наиболее точно и кратко о Python сказал его создатель — голландец
Гвидо ван Россум (Guido van Rossum):
“Python – интерпретируемый, объектно-ориентированный
высокоуровневый язык программирования с динамической семантикой. Его
встроенные высокоуровневые структуры данных в сочетании с
динамическим управлением типами и (поздним) динамическим связыванием
6
делают язык очень привлекательным для быстрой разработки приложений
(RAD, Rapid Application Development), а также в качестве сценарного или
«склеивающего» языка для связи существующих программных компонентов.
Простой, легкий для изучения синтаксис Python, в котором придается особое
значение читаемости кода, сокращает затраты на сопровождение программ.
Python поддерживает модули и пакеты, поощряя модульность и повторное
использование кода. Интерпретатор Python, и большая стандартная
библиотека бесплатно доступны в виде исходных и бинарных кодов для всех
основных платформ и могут свободно распространяться.”
Почему же выбор пал на Python? Есть множество причин, но я
перечислю лишь основные[11].
1) Качество программного обеспечения
Для многих основное преимущество языка Python заключается в
удобочитаемости, ясности и более высоком качестве, отличающими
его от других инструментов в мире языков сценариев. Программный
код на языке Python[15][16] читается легче, а значит, многократное его
использование и обслуживание выполняется гораздо проще, чем
использование программного кода на других языках сценариев.
Единообразие оформления программного кода на языке Python
облегчает его понимание даже для тех, кто не участвовал в его
создании. Кроме того, Python поддерживает самые современные
механизмы многократного использования программного кода, каким
является объектно-ориентированное программирование (ООП).
2) Высокая скорость разработки
По сравнению с компилирующими или строго типизированными
языками, такими как С, C++ и Java, Python во много раз повышает
производительность труда разработчика. Объем программного кода на
языке Python обычно составляет треть или даже пятую часть
эквивалентного программного кода на языке C++ или Java. Это
7
означает меньший объем ввода с клавиатуры, меньшее количество
времени на отладку и меньший объем трудозатрат на сопровождение.
3) Переносимость программ
Большая часть программ на языке Python выполняется без изменений
на всех основных платформах. Перенос программного кода из
операционной системы Linux в Windows обычно заключается в
простом копировании файлов программ с одной машины на другую.
Более того, Python предоставляет массу возможностей по созданию
переносимых графических интерфейсов, программ доступа к базам
данных, web -приложений и многих других типов
4) Библиотеки поддержки
В составе Python поставляется большое число собранных и
переносимых функциональных возможностей, известных как
стандартная библиотека. Эта библиотека предоставляет массу
возможностей, востребованных в прикладных программах, начиная от
поиска текста по шаблону и заканчивая сетевыми функциями. Кроме
того, Python допускает расширение как за счет ваших собственных
библиотек, так и за счет библиотек, созданных сторонними
разработчиками. Из числа сторонних разработок можно назвать
инструменты создания web-сайтов, программирование математических
вычислений, доступ к последовательному порту, разработку игровых
программ и многое другое.
5) Интеграция компонентов
Сценарии Python легко могут взаимодействовать с другими частями
приложения благодаря различным механизмам интеграции. Эта
интеграция позволяет использовать Python для настройки и
расширения функциональных возможностей программных продуктов.
Единственный недостаток Python скорость выполнения программ,
которая не всегда может быть такой же высокой, как у программ,
8
написанных на компилирующих языках программирования, таких как
С/C++.
Будучи удачно спроектированным языком программирования Python
прекрасно подходит для решения реальных задач из разряда тех, которые
разработчикам приходится решать ежедневно. Он используется в самом
широком спектре применений - и как инструмент управления другими
программными компонентами, и для реализации самостоятельных программ.
Фактически круг ролей, которые может играть Python как многоцелевой язык
программирования, практически не ограничен: он может использоваться для
реализации всего, что угодно, - от web-сайтов и игровых программ до
управления роботами и научных вычислений.
Python поддерживает несколько парадигм программирования, в том
числе структурное, объектно-ориентированное, функциональное,
императивное и аспектно-ориентированное.
Основные архитектурные черты — динамическая типизация,
автоматическое управление памятью, полная интроспекция, механизм
обработки исключений, поддержка многопоточных вычислений и удобные
высокоуровневые структуры данных. Код в Python организовывается в
функции и классы, которые могут объединяться в модули (они в свою
очередь могут быть объединены в пакеты).
В Python[13] все значения являются объектами, в том числе функции,
методы, модули, классы. Каждый объект имеет свой тип и список имен,
ссылающихся на данный объект. Когда какому-либо имени присваивается
новый объект (который может быть другого типа), имя удаляется из списка
старого объекта и добавляется в список нового объекта. Таким образом,
переменные могут как бы менять свой тип, но тип самих объектов при этом
не изменяется. Данный прием называется строгой динамической типизацией.
В Python имеются встроенные типы: булевый, строка, Unicode-строка,
целое число произвольной точности, число с плавающей запятой,
9
комплексное число и некоторые другие. Из коллекций в Python встроены:
список, кортеж (неизменяемый список), словарь, множество и другие.
Все объекты делятся на ссылочные и атомарные. К атомарным
относятся int, long (в версии 3 любое число int, так как в версии 3 нет
ограничения на размер), complex и некоторые другие. При присваивании
атомарных объектов копируется их значение, в то время как для ссылочных
копируется только указатель на объект, таким образом, обе переменные
после присваивания используют одно и то же значение. Ссылочные объекты
бывают изменяемые и неизменяемые. Например, строки и кортежи являются
неизменяемыми, а списки, словари и многие другие объекты —
изменяемыми. Кортеж в Python является, по сути, неизменяемым списком.
Во многих случаях кортежи работают быстрее списков.
Язык Python изначально задумывался как объектно-ориентированный
язык, соответственно он поддерживает эту парадигму программирования и
имеет средства её реализации.
В действительности весь программный код, написанный на языке
Python[42][43], был основан на объектах (object-based), - везде в сценариях
передаются объекты, используются в выражениях, вызываются их методы и
так далее. Однако, чтобы программный код стал по-настоящему объектно-
ориентированным (ОО), наши объекты должны участвовать в иерархии
наследования.
Для реализации новых типов объектов, поддерживающих
наследование, в языке Python[12] используют классы. Классы в языке Python
создаются с помощью инструкции class. Объекты, определяемые с помощью
классов, очень напоминают встроенные типы.
Основное назначение классов состоит в том, чтобы создавать и
манипулировать новыми объектами, а кроме того, они поддерживают
механизм наследования.
Одно предварительное замечание: ООП в языке Python является
необязательным к применению и не обязательно использовать классы.
10
Что касается Django [5]. Первоначально платформа Django была
написана Адриано Холовати и Саймоном Уиллисоном, работавшим в World
Online, семейной web-компании. Она появилась из-за необходимости быстро
разрабатывать приложения баз данных, наполняемых содержим новостей.
После того как платформа доказала свою состоятельность, в июле 2005
года она была выпущена как проект с открытыми исходными текстами – это
было время, когда было широко распространено мнение, что на языке Python
реализовано слишком мало web-платформ, и быстро получила мощную
поддержку. В настоящее время эта платформа является одним из лидеров не
только среди платформ для разработки web-приложений на языке Python, но
и среди всех web-платформ.
Web-платформа (фреймворк) Django[7] основывает структуру своего
проекта на разновидности шаблона проектирования Модель-Представление-
Контроллер (Model-View-Controller - MVC). Говоря простыми словами, MVC
- это такой способ разработки программного обеспечения, при котором код
определения и доступа к данным (модель) отделен от логики взаимодействия
с приложением (контроллер), которая, в свою очередь, отделена от
пользовательского интерфейса (представление).
Главное достоинство такого подхода состоит в том, что компоненты
слабо связаны. У каждого компонента web-приложения, созданного на базе
Django, имеется единственное назначение, поэтому его можно изменять
независимо от остальных компонентов. Например, разработчик может
изменить URL некоторой части приложения, и это никак не скажется на ее
реализации. Дизайнер может изменить HTML страницы, не трогая
генерирующий ее код на языке Python[21]. Администратор базы данных
может переименовать таблицу базы данных и описать это изменение в
одном-единственном месте, а не заниматься контекстным поиском и заменой
в десятках файлов.
11
1.2 Обзор PostgreSQL. Преимущества перед конкурентами
В настоящее время термин «база данных» известен многим людям,
даже далеким от профессиональной разработки компьютерных программ.
Базы данных стали очень широко распространенной технологией, что
потребовало, в свою очередь, большего числа специалистов, способных
проектировать их и обслуживать. В ходе эволюции теории и практики баз,
данных стандартом де-факто стала реляционная модель данных, а в рамках
этой модели сформировался и специализированный язык программирования,
позволяющий выполнять все необходимые операции с данными —
Structured Query Language (SQL) [6].
Реализация языка SQL в каждой СУБД соответствует стандарту в той
или иной степени, но кроме стандартизированных функций и возможностей,
каждая СУБД предлагает и свои дополнительные расширения языка.
PostgreSQL обеспечивает очень хорошую поддержку стандарта языка SQL и
также предоставляет интересные и практически полезные дополнительные
возможности. Одним из главных достоинств PostgreSQL [4] является
расширяемость. Это означает, например, что пользователь (конечно,
являющийся специалистом в области баз данных) может разработать свои
собственные типы данных. Эти типы данных будут обладать всеми
свойствами встроенных типов данных и могут быть введены в работу без
останова сервера.
И так, краткое определение PostgreSQL звучит примерно так.
PostgreSQL [9] — наиболее полнофункциональная, свободно
распространяемая СУБД с открытым кодом. Разработанная в академической
среде, за долгую историю сплотившая вокруг себя широкое сообщество
разработчиков, эта СУБД обладает всеми возможностями, необходимыми
большинству заказчиков. PostgreSQL активно применяется по всему миру
для создания критичных бизнес-систем, работающих под большой нагрузкой.

Смотрите также:

"Автоматизация обработки заявок ООО "Проектно-Строительная Компания"
"Автоматизация процесса аттестации персонала для ООО "Нэт Бай Нэт Холдинг"
"Анализ интернет-активности конкурентов ( на примере конкурентов "Газпром нефть")
"Бухгалтерский учёт и аудит расчётов с подотчётними лицами в организации на примере ООО "ЛОЦ 10""
«Психологическое сопровождение персонала в организации на примере ООО «Крокус»
Cовершенствование деловой оценки персонала в организации (на примере ООО "Даймонд кейтеринг развитие")
PR как средство продвижения организации (на примере ПАО "Тамбовский завод "Комсомолец им. Н.С. Артемова")
PR-коммуникации в сфере общественного питания (на примере кафе-кондитерской «Cream Cheese»)
SMM как средство повышения эффективности работы учреждений социокультурной сферы (на примере Малого театра)
Value-based education: ценности в системе образования и способы их реализации на уроке английского языка. Опыт Европейских стран