Рубрики
Без рубрики

Введение в структуру пирамиды Python

Автор оригинала: Muhammad Junaid Khalid.

Вступление

В этом уроке мы узнаем, как использовать фреймворк Pyramid в Python. Это фреймворк веб-разработки с открытым исходным кодом, который использует шаблон архитектуры Model-View-Controller (MVC) и основан на интерфейсе шлюза веб-сервера (WSGI). Фреймворк Pyramid имеет множество полезных дополнительных пакетов, которые делают веб-разработку намного более удобной. Некоторые другие популярные альтернативы для веб-разработки на Python включают Django и Flask .

Предпосылки

Для этого урока вам необходимо иметь базовые знания HTML. Если у вас нет никакого предыдущего опыта работы с ним, не беспокойтесь об этом, вы все еще можете следовать этому учебнику и понять, как работает пирамида, но для разработки реальных веб-приложений вам придется вернуться и изучить HTML.

Архитектура

Прежде чем мы перейдем к рассмотрению кода, давайте сначала разберемся в WSGI и MVC.

WSGI-это в основном стандарт, который определяет способ взаимодействия веб-приложения на основе Python с сервером. Он управляет процессом отправки запросов на сервер и получения ответов от сервера.

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

Google Maps-прекрасный пример архитектуры MVC. Когда мы используем функцию поиска маршрута в Google Maps, модель содержит код алгоритма, который находит кратчайший путь из местоположения А в местоположение В, представление-это экран, который отображается вам с картой, помеченной маршрутом, а контроллер содержит код, который использует кратчайший путь, найденный моделью, и отображает его пользователю через представление. Вы также можете просмотреть контроллер, как код, который получает запрос от представления (от пользователя), пересылает его в модель для генерации ответа, а затем отображает ответ от модели обратно пользователю через представление.

Помимо WSGI и MVC, есть еще два термина, с которыми вы должны быть знакомы, а именно “маршруты” и “скрипты”. Маршруты позволяют разделить ваш веб-сайт на различные веб-страницы, причем каждая веб-страница выполняет свою функцию.

Давайте рассмотрим Facebook в качестве примера. Если вы хотите просмотреть свои сообщения, для этого открывается новая веб-страница с другим видом, если вы хотите просмотреть свой собственный профиль, для этого открывается новая веб-страница, но все они подключены к вашему основному веб-сайту. Это делается с помощью маршрутов. Каждый раз, когда вы нажимаете на кнопку или ссылку, вы перенаправляетесь на новую веб-страницу, указанную маршрутами в нашем приложении.

Что касается скриптов, то они просто включают в себя параметры конфигурации нашего приложения и помогают управлять им.

Подробнее обо всех этих терминах мы узнаем, когда создадим базовое веб-приложение с использованием Pyramid. Итак, давайте начнем.

Установка

Всякий раз, когда мы разрабатываем веб-приложение, которое должно быть развернуто в Интернете, всегда считается хорошей практикой сначала создать виртуальную среду. Виртуальная среда содержит все библиотеки или фреймворки и все другие зависимости, необходимые для запуска веб – приложения. Таким образом, при развертывании приложения на сервере вы можете просто переустановить все эти библиотеки на сервере, чтобы ваше приложение работало бесперебойно.

Давайте создадим виртуальную среду, прежде чем двигаться дальше. Установите модуль виртуальной среды, выполнив приведенную ниже команду в вашем терминале:

$ pip install virtualenv

Чтобы проверить успешность установки, выполните следующую команду:

$ virtualenv --version

Если вы видите номер версии, напечатанный на консоли, то установка прошла успешно (или virtualenv уже был установлен в вашей системе).

Чтобы создать виртуальную среду, сначала перейдите в папку, в которой вы хотите ее создать, а затем выполните следующую команду:

$ virtualenv myvenv

Примечание : Вы можете назвать свою виртуальную среду как угодно. Здесь мы используем “my env” только в демонстрационных целях.

Последний шаг-активация виртуальной среды. На компьютере Mac выполните в терминале следующую команду:

$ source myvenv/bin/activate

На компьютере с Windows вы можете активировать среду с помощью следующей команды:

'Installation folder'\myvenv\Scripts\activate.bat

Теперь, когда вы настроили свою виртуальную среду, давайте установим в нее пирамиду. Для этого мы будем использовать менеджер пакетов pip:

$ pip install pyramid

Примечание : Когда вы закончите работу с приложением и захотите деактивировать свою виртуальную среду, выполните в терминале следующую команду:

$ deactivate

Упражнение по кодированию

В этом разделе мы начнем с кодирования скелетного приложения, чтобы понять, как структурированы приложения пирамиды и как они взаимодействуют на базовом уровне. После этого мы увидим, как создавать приложения с несколькими представлениями.

Простой пример пирамиды Python

# intro.py
# Import necessary functions to run our web app

from wsgiref.simple_server import make_server
from pyramid.config import Configurator
from pyramid.response import Response

# This function receives a request from the user, and returns a response
def intro(request):
    return Response('Hi, My name is Junaid Khalid')

# This function will start a server on our computer (localhost), define the
# routes for our application, and also add a view to be shown to the user
def main():
    with Configurator() as config:

        config.add_route('intro', '/')
        config.add_view(intro, route_name='intro')
        application = config.make_wsgi_app()

    # 8000 is the port number through which the requests of our app will be served
    server = make_server('0.0.0.0', 8000, application)
    server.serve_forever()

main()

Примечание : Модуль Конфигуратор используется для подключения определенного вида к определенному маршруту. Например, на Facebook представление “Мой профиль” будет отличаться от представления “Лента новостей”, и оба они также имеют разные URL-адреса. Это именно то, что делает конфигуратор; подключение определенного URL-адреса/маршрута к определенному представлению.

Затем make_server methods используется для запуска нашего приложения на локальном HTTP-сервере на нашей машине с назначенным номером порта.

Функция intro используется для обработки запросов, полученных от пользователя, обработки их и возврата ответа в представление. Любая обработка запроса перед отправкой ответа может быть выполнена внутри этой функции.

Чтобы запустить вышеуказанное приложение на вашей рабочей станции, перейдите к терминалу и запустите файл .py, который мы только что создали:

$ python3 intro.py

В моем случае имя файла intro.py, но ваш может быть другим в зависимости от того, как вы решили его назвать.

Затем откройте любой веб-браузер на вашем компьютере и перейдите по этому адресу: http://localhost:8000 . Вы должны увидеть веб-страницу с надписью “Привет, меня зовут Джунаид Халид”, написанной очень эстетически неприятным образом. Чтобы сделать его более приятным, вы также можете вернуть HTML – код в качестве ответа. Для простого примера давайте отредактируем функцию intro:

def intro(request):
    return Response('

Hi, My name is Junaid Khalid.

')

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

Примечание : Когда вы вносите какие-либо изменения в код, сервер автоматически не регистрирует их. Вам придется остановить сервер, а затем перезапустить его, чтобы увидеть, как ваши изменения вступят в силу. Для этого откройте терминал, на котором работает сервер , и нажмите Control+C , это приведет к завершению работы сервера. Затем вы можете перезапустить свой сервер, как обычно, чтобы увидеть изменения.

Разделение и отображение нескольких видов

В этом разделе мы добавим еще несколько представлений, а также удалим наши представления из основного файла (т. е. ‘intro.py’ файл), и поместить их все в новый отдельный файл (‘all_views.py). Это модульизирует наш код, сделает его более чистым, а также позволит нам легче добавлять новые представления. Итак, давайте сделаем это.

# all_views.py
# Import necessary functions to run our web app
from pyramid.compat import escape
from pyramid.response import Response
from pyramid.view import view_config

# view_config functions tells Pyramid which route's view is going to be defined in the function that follows
# the name of the function does not matter, you can name it whatever you like

@view_config(route_name='intro')
def home_page(request):
    header = '

Home Page

' body = '

Hi, My name is Junaid Khalid.

' body += '

This is my portfolio website.

' footer = '

Checkout my previous jobs.

' # In the 'a' tag, notice that the href contains '/jobs', this route will be defined in the intro.py file # It is simply telling the view to navigate to that route, and run whatever code is in that view return Response(header + body + footer) @view_config(route_name='jobs') def job_history(request): header = '

Job History

' job1 = '

Jr. Software Developer at XYZ

' return Response(header + job1)

Примечание : На начальном уровне вы можете написать HTML-код, следуя стратегии, использованной выше, т. е. Объявить теги в различных переменных и просто объединить их при отправке ответа. В какой-то момент вы, вероятно, захотите использовать механизм шаблонов, например Jinja , чтобы сделать генерацию HTML намного проще.

Наше приложение пока не будет работать, нам нужно отредактировать intro.py и файл тоже.

# intro.py
# Import necessary functions to run our web app

from wsgiref.simple_server import make_server
from pyramid.config import Configurator
from pyramid.response import Response

def main():
    with Configurator() as config:
        # In add_route function, the first parameter defines the name of the route
        # and the second parameter defines the 'route' or the page location
        config.add_route('intro', '/')
        config.add_route('jobs', '/jobs')

        # The scan function scans our project directory for a file named all_views.py
        # and connects the routes we provided above with their relevant views
        config.scan('all_views')

        application = config.make_wsgi_app()

    # The following lines of code configure and start a server which hosts our
    # website locally (i.e. on our computer)
    server = make_server('0.0.0.0', 8000, application)
    server.serve_forever()

main()

Как вы можете видеть, мы удалили код для нашего предыдущего представления. Если бы мы объявили все эти представления в одном файле, файл выглядел бы гораздо более загроможденным. Оба файла теперь выглядят очень чистыми, и каждый файл теперь служит одной цели. Давайте посмотрим, как выглядит наше веб-приложение прямо сейчас.

Выход:

На изображении выше мы видим нашу домашнюю страницу. Он расположен на трассе ‘ http://localhost:8000 ‘. Это не выглядит очень эстетично, но, как было сказано в начале урока, это не было нашей целью в любом случае. Если мы хотим, чтобы он выглядел эстетично, мы можем добавить к нему много стилей, используя атрибут стиля HTML или CSS, или использовать шаблоны из Bootstrap.

Двигаясь дальше, вы также можете увидеть гиперссылку, которая была названа “предыдущие задания”. Нажав на нее, вы попадете на новую веб-страницу с другим маршрутом. Мы увидим результат этого на следующем изображении.

Выход:

На приведенном выше рисунке показана наша страница вакансий. Он расположен на трассе http://localhost:8000/jobs . Мы указали этот маршрут в нашем ‘intro.py – файл. Я добавил только одно задание, чтобы показать его в качестве примера.

Вывод

Pyramid-это платформа веб-разработки на основе Python для легкого создания веб-приложений. В этом уроке мы узнали, как установить Pyramid внутри виртуальной среды и создать базовое веб-приложение с помощью Pyramid, которое работает на локально созданном сервере на нашем компьютере.

Если вы хотите углубиться в более подробную информацию, посетите Pyramid’s documentation – она довольно сложна и удобна для начинающих.