Introducción al marco de la pirámide de Python

En este tutorial, vamos a aprender cómo usar el marco Pyramid en Python. Es un marco de desarrollo web de código abierto que utiliza Model-View-Con...

Introducción

En este tutorial, vamos a aprender a usar el framework Pirámide en Python. Es un framework de desarrollo web de código abierto que utiliza el patrón de arquitectura Modelo-Vista-Controlador (MVC) y está basado en Interfaz de puerta de enlace del servidor web (WSGI). El marco Pyramid tiene muchos paquetes adicionales útiles que hacen que el desarrollo web sea mucho más conveniente. Algunas otras alternativas populares para el desarrollo web en Python incluyen Django y Matraz.

Requisitos previos

Necesita tener conocimientos básicos de HTML para este tutorial. Si no tiene ninguna experiencia previa con él, no se preocupe, aún puede seguir este tutorial y comprender cómo funciona Pyramid, pero para desarrollar aplicaciones web del mundo real tendrá que volver atrás y aprender HTML.

Arquitectura

Antes de continuar y ver el código, primero entendamos WSGI y MVC.

WSGI es básicamente un estándar que define la forma en que una aplicación web basada en Python interactúa con un servidor. Gobierna el proceso de enviar solicitudes a un servidor y recibir respuestas de un servidor.

MVC es un patrón arquitectónico que modulariza su aplicación; el modelo contiene los datos y la lógica comercial de su aplicación, la vista muestra la información relevante para el usuario y el controlador es responsable de la interacción entre el modelo y la vista.

Google Maps es un ejemplo perfecto de la arquitectura MVC. Cuando usamos la función de búsqueda de rutas en Google Maps, el modelo contiene el código para el algoritmo que encuentra la ruta más corta desde la ubicación A hasta la ubicación B, la vista es la pantalla que se le muestra que contiene el mapa etiquetado con la ruta, y el controlador contiene el código que usa la ruta más corta encontrada por el modelo y se la muestra al usuario a través de la vista. También puede ver el controlador, como el código que recibe una solicitud de la vista (por parte del usuario), la reenvía al modelo para generar una respuesta y luego muestra la respuesta del modelo al usuario a través de una vista.

Además de WSGI y MVC, hay dos términos más con los que debería estar familiarizado, que son "rutas" y "scripts". Las rutas permiten que su sitio web se divida en diferentes páginas web, cada una de las cuales realiza una función diferente.

Consideremos Facebook como un ejemplo. Si desea ver sus mensajes, se abre una nueva página web con una vista diferente para eso, si desea ver su propio perfil, se abre una nueva página web para eso, pero todos están conectados a su sitio web principal. Eso se hace a través de rutas. Cada vez que hace clic en un botón o enlace, se le redirige a una nueva página web según lo especificado por las rutas en nuestra aplicación.

En cuanto a los scripts, simplemente incluyen opciones de configuración para nuestra aplicación y ayudan a administrarla.

Aprenderemos más sobre todos estos términos cuando creemos una aplicación web básica usando Pyramid. Vamos a empezar.

Instalación

Siempre que desarrollamos una aplicación web que se implementará en línea, siempre se considera una buena práctica crear primero un entorno virtual. El entorno virtual contiene todas las bibliotecas o marcos y todas las demás dependencias necesarias para ejecutar la aplicación web. De esta manera, cuando implemente su aplicación en un servidor, simplemente puede volver a instalar todas esas bibliotecas en el servidor para que su aplicación funcione sin problemas.

Vamos a crear un entorno virtual antes de seguir adelante. Instale el módulo de entorno virtual ejecutando el siguiente comando en su terminal:

1
$ pip install virtualenv

Para probar que su instalación fue exitosa, ejecute el siguiente comando:

1
$ virtualenv --version

Si ve un número de versión impreso en la consola, la instalación fue exitosa (o virtualenv ya estaba instalado en su sistema).

Para crear un entorno virtual, primero navegue a la carpeta donde desea crearlo y luego ejecute el siguiente comando:

1
$ virtualenv myvenv

Nota: Puede nombrar su entorno virtual como desee. Aquí estamos usando "myenv" solo con fines de demostración.

El último paso es activar su entorno virtual. En Mac, ejecute el siguiente comando en la terminal:

1
$ source myvenv/bin/activate

En una máquina con Windows, puede activar el entorno con el siguiente comando:

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

Ahora que tiene configurado su entorno virtual, instalemos Pyramid en él. Usaremos el administrador de paquetes pip para eso:

1
$ pip install pyramid

Nota: Cuando haya terminado de trabajar con la aplicación y desee desactivar su entorno virtual, ejecute el siguiente comando en la terminal:

1
$ deactivate

Ejercicio de codificación {#ejercicio de codificación}

En esta sección, comenzaremos codificando una aplicación básica para comprender cómo se estructuran las aplicaciones de Pyramid y cómo se comunican en un nivel básico. Después de eso, veremos cómo crear aplicaciones con múltiples vistas.

Un ejemplo simple de la pirámide de Python

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 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()

Nota: El módulo Configurador se utiliza para conectar una vista particular a una ruta específica. Por ejemplo, en Facebook, la vista "Mi perfil" sería diferente a la vista "Noticias", y ambas tienen direcciones URL diferentes también. Esto es exactamente lo que hace un configurador; conectando una URL/ruta específica a una vista particular.

Luego, los métodos make_server se usan para ejecutar nuestra aplicación en un servidor HTTP local en nuestra máquina, con un número de puerto asignado.

La función intro se utiliza para procesar las solicitudes recibidas del usuario, procesarlas y devolver la respuesta a la vista. Cualquier procesamiento de la solicitud antes de enviar una respuesta se puede realizar dentro de esta función.

Para ejecutar la aplicación anterior en su estación de trabajo, vaya a la terminal y ejecute el archivo .py que acabamos de crear:

1
$ python3 intro.py

En mi caso, el nombre del archivo es intro.py, pero el tuyo podría ser diferente dependiendo de cómo decidas nombrarlo.

Luego abra cualquier navegador web en su PC y vaya a esta dirección: http://localhost:8000. Deberías ver una página web con "Hola, mi nombre es Junaid Khalid" escrito de una manera estéticamente desagradable. Para que parezca más agradable, también puede devolver el código HTML como respuesta. Para un ejemplo simple, editemos la función de introducción:

1
2
def intro(request):
    return Response('<h2 style="text-align: center; font-family: verdana; color: blue;">Hi, My name is Junaid Khalid.</h2>')

Reemplace la función de introducción con la anterior y vea el resultado ahora. Mucho mejor, ¿verdad? Este fue solo un ejemplo. Puedes hacerlo mucho mejor.

Nota: Cuando realiza algún cambio en el código, el servidor no lo registrará automáticamente. Deberá detener el servidor y luego reiniciarlo para que los cambios surtan efecto. Para hacer eso, abra su terminal donde se ejecuta el servidor y presione Control + C, esto cerrará el servidor. Luego puede reiniciar su servidor como de costumbre para ver los cambios.

Separación y visualización de múltiples vistas

En esta sección, agregaremos algunas vistas más y eliminaremos nuestras vistas del archivo principal (es decir, el archivo 'intro.py') y las pondremos todas en un nuevo archivo separado ('all_views.py' ). Esto modularizará nuestro código, hará que se vea más limpio y también nos permitirá agregar nuevas vistas más fácilmente. Hagamoslo.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 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 = '<h2 style="text-align: center;">Home Page</h2>'
    body = '<br><br><p style="text-align: center; font-family: verdana; color: blue;">Hi, My name is Junaid Khalid.</p>'
    body += '<p style="text-align: center; font-family: verdana;"> This is my portfolio website.</p>'
    footer = '<p style="text-align: center; font-family: verdana;">Checkout my <a href="/jobs">previous jobs</a>.</p>'

    # 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 = '<h2 style="text-align: center;">Job History</h2>'
    job1 = '<p style="text-align: center; font-family: verdana;">Jr. Software Developer at XYZ</p>'

    return Response(header + job1)

Nota: en el nivel de principiante, puede escribir el código HTML siguiendo la estrategia utilizada anteriormente, es decir, declarar etiquetas en diferentes variables y simplemente concatenarlas al enviar la respuesta. En algún momento, probablemente querrá usar un motor de plantillas, como Jinja para hacer que la generación de HTML sea mucho más simple.

Nuestra aplicación no se ejecutará todavía, también debemos editar el archivo intro.py.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 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()

Como puede ver, hemos eliminado el código de nuestra vista anterior. Si hubiéramos declarado todas estas vistas en un solo archivo, el archivo se habría visto mucho más desordenado. Ambos archivos se ven muy limpios ahora, y cada archivo ahora tiene un solo propósito. Veamos cómo se ve nuestra aplicación web en este momento.

Producción:

{.img-responsive}

En la imagen de arriba, podemos ver nuestra página de inicio. Se encuentra en la ruta 'http://localhost:8000'. No se ve muy agradable estéticamente, pero como se indicó al comienzo del tutorial, este no era nuestro objetivo de todos modos. Si queremos que se vea estético, podemos agregarle mucho estilo usando el atributo de estilo HTML o CSS, o usar plantillas de Bootstrap.

Continuando, también puede ver un hipervínculo que se ha denominado 'trabajos anteriores'. Hacer clic en eso lo llevaría a una nueva página web con una ruta diferente. Veremos el resultado de eso en la siguiente imagen.

Producción:

{.img-responsive}

La imagen de arriba muestra nuestra página de Empleos. Se encuentra en la ruta http://localhost:8000/jobs. Especificamos esta ruta en nuestro archivo 'intro.py'. Solo he agregado un trabajo para mostrar como ejemplo.

Conclusión

Pyramid es un marco de desarrollo web basado en Python para crear aplicaciones web con facilidad. En este tutorial, aprendimos cómo instalar Pyramid dentro de un entorno virtual y crear una aplicación web básica usando Pyramid que se ejecuta en un servidor creado localmente en nuestra computadora.

Si desea entrar en más detalles, visite la documentación de Pyramid. Es bastante elaborada y fácil de usar para principiantes.