Logo de Código Facilito
  • Inicio
  • Replays
  • Iniciar sesión
  • Crear cuenta
  • Explorar cursos
  • Bootcamps
  • Precios
  • Blog

¡Califica el Curso Profesional de Desarrollo Web con Python!

Selecciona la calificación de 1 a 5 estrellas

Reporta un error

Curso Curso Profesional de Desarrollo Web con Python

Video WSGI python

Tipo de error

Algo salió mal al cargar el vídeo

El vídeo no pudo cargarse, hemos enviado un reporte al equipo de desarrollo, para poder solucionarlo a la brevedad.

Mientras solucionamos el problema, intenta lo siguiente para solucionar el error:

  • Recarga la página
  • Intenta reiniciar tu navegador y luego vuelve a reproducir el vídeo
  • Vacía el caché de tu navegador
  • Intenta reproducir con las extensiones del navegador deshabilitadas
  • Intenta con un navegador distinto
  • Si el problema persiste contáctanos en Discord
home Ir al inicio report_problem Reportar falla star Valorar curso

Si eres un desarrollador Python y quieres comenzar a crear tus propios proyectos web, déjame decirte que puedes comenzar desde el ya si la necesidad de instalar ningún tipo de framewok o librería. ¿Cómo es esto posible? 🤔, deja te cuento.

La comunidad web Python ha creado un estándar llamado Web Server Gateway Interface, o por sus siglas, WSGI. Este standar nos permite escribir programas los cuales puedan comunicarse a través del protocolo HTTP, es decir, Internet.

WSGI se encuentra inspirado en el estándar Common Gateway Interface o CGI.

Cuando escribimos un programa siguiendo el standar SWGI dicho programa podrá ejecutarse en un servidor web tal como Apache o nginix.

Hola Mundo

Ahora vamos a crear nuestro primer Hola mundo utilizando el estándar WSGI.

from wsgiref.simple_server import make_server

def application(environ, start_response):
    headers = [('Content-type', 'text/plain; charset=utf-8')]

    start_response('200 OK', headers)

    return ['Hola gente de códigofacilito'.encode('utf-8')]

server = make_server('localhost', 8000, application)
server.serve_forever()

Listo, con 11 líneas de código tenemos un servidor que es capaz de responder a las peticiones de diferentes clientes.

Si nosotros ejecutamos nuestro script, e ingresamos a http://localhost:8000/ a través de nuestro navegador obtendremos el siguiente resultado :

Lo primero que debemos hacer es importar la función make_server, a partir de esta función podremos generar nuestro servidor.

La función recibe tres argumentos obligatorios, La dirección del servidor, el puerto y la _función handler. La función como observamos posee dos parámetros environ y start_response.

  • El parametro env es un diccionarion el cual contiene variables wsgi relacionadas con la petición del cliente (Método del protocolo, Query String etc ...)

  • El parametro start_response es un callback el cual recibe, de forma obligatoria, dos argumentos. El estatus y los encabezados de la respuesta.

Dentro de la función definimos los encabezados de la respuesta, de igual forma indicamos el status code, en este caso 200, exito 😎, finalmente retornamos un recurso. Para este ejemplo hemos retornado un pequeño string.

Páginas web

Si nosotros así lo deseamos podemos retornar una páginas web. 😃

from wsgiref.simple_server import make_server

HTML = """
<!DOCTYPE html>
<html>
  <head>
    <title>Título</title>
  </head>
  <body>
    <h1>Hola gente de códigofacilito</h1>
  </body>
</html>
"""

def application(environ, start_response):
    headers = [ ('Content-type', 'text/html; charset=utf-8') ]

    start_response('200 OK', headers)

    return [bytes(HTML, 'utf-8')]

server = make_server('localhost', 8000, application)
server.serve_forever()

Páginas dinámicas

Con la ayuda de la librería Jinja2 podemos crear páginas web dinámicas. Su integración es muy sencilla.

En esta ocasión genero un archivo .html que será nuestro template. En mi caso, el archivo lo almaceno en el folder templates.

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title> {{ title }} </title>
  </head>
  <body>
    <h1>Hola {{ username }}</h1>
  </body>
</html>

Una maquetado bastante sencillo, pero funcionará.

Mi script principal quedaría de la siguiente manera.

from jinja2 import FileSystemLoader, Environment
from wsgiref.simple_server import make_server

def application(environ, start_response):
    env = Environment(loader=FileSystemLoader("templates"))
    template = env.get_template('template.html')

    data = {
        'title': 'WSGI tutorial',
        'username': 'Codi'
    }

    html = template.render(data)

    headers = [ ('Content-type', 'text/html; charset=utf-8') ]

    start_response('200 OK', headers)

    return [bytes(html, 'utf-8')]

server = make_server('localhost', 8000, application)
server.serve_forever()

Lo primero que hacemos es obtener nuestro template, nuestro archivo .html, posteriormente lo renderizamos utilizando un diccionario como argumento, en el diccionario colocamos todos los valores a utilizar en el template.


  • Módulo 1 | 17 clases

    Introducción y Fundamentos

    expand_more
    • play_circle_outline

      Clase 1

      Introducción al curso de Python Web

    • play_circle_outline

      Clase 2

      Qué es Flask

    • play_arrow

      Clase 3

      WSGI python

    • play_circle_outline

      Clase 4

      Entorno de desarrollo e instalación de Flask

    • play_circle_outline

      Clase 5

      Crear servidor de Flask

    • play_circle_outline

      Clase 6

      Hola mundo (primera página web)

    • play_circle_outline

      Clase 7

      Renderizar template

    • play_circle_outline

      Clase 8

      Páginas web dinámicas

    • play_circle_outline

      Clase 9

      Ciclos y condicionales

    • play_circle_outline

      Clase 10

      Plantillas Jinja2

    • play_circle_outline

      Clase 11

      Parámetros

    • play_circle_outline

      Clase 12

      ¿Qué es el query string?

    • play_circle_outline

      Clase 13

      Lectura de queries

    • play_circle_outline

      Clase 14

      Archivos estáticos

    • play_circle_outline

      Clase 15

      Herencia de plantillas

    • play_circle_outline

      Clase 16

      Links

    • play_circle_outline

      Clase 17

      Callbacks

  • Módulo 2 | 7 clases

    Proyecto del curso

    expand_more
    • play_circle_outline

      Clase 1

      Estructura del proyecto

    • play_circle_outline

      Clase 2

      Urls

    • play_circle_outline

      Clase 3

      Manejo de archivos estáticos

    • play_circle_outline

      Clase 4

      Errores y manejo

    • play_circle_outline

      Clase 5

      Archivos de configuraciones

    • play_circle_outline

      Clase 6

      Integración con Bootstrap

    • play_circle_outline

      Clase 7

      Layout Principal

  • Módulo 3 | 7 clases

    Formularios

    expand_more
    • play_circle_outline

      Clase 1

      Crear formulario

    • play_circle_outline

      Clase 2

      Pintar formulario

    • play_circle_outline

      Clase 3

      Macros

    • play_circle_outline

      Clase 4

      Macros en Jinja2

    • play_circle_outline

      Clase 5

      Obtener valores del formulario

    • play_circle_outline

      Clase 6

      CSRF

    • play_circle_outline

      Clase 7

      Validaciones

  • Módulo 4 | 6 clases

    Modelos

    expand_more
    • play_circle_outline

      Clase 1

      Conexión con la base de datos

    • play_circle_outline

      Clase 2

      Crear tabla de usuarios

    • play_circle_outline

      Clase 3

      Formulario para crear usuarios

    • play_circle_outline

      Clase 4

      Registrar usuario

    • play_circle_outline

      Clase 5

      Mensaje flashed

    • play_circle_outline

      Clase 6

      Generar contraseña

  • Módulo 5 | 4 clases

    Validaciones

    expand_more
    • play_circle_outline

      Clase 1

      Validaciones mediante funciones

    • play_circle_outline

      Clase 2

      Honeypot un método anti spam

    • play_circle_outline

      Clase 3

      Validaciones mediante métodos

    • play_circle_outline

      Clase 4

      Método validate

  • Módulo 6 | 7 clases

    Autenticación de usuarios

    expand_more
    • play_circle_outline

      Clase 1

      Obtener (buscar) usuario

    • play_circle_outline

      Clase 2

      Generar sesión

    • play_circle_outline

      Clase 3

      Mensajes por categorías

    • play_circle_outline

      Clase 4

      Cerrar sesión

    • play_circle_outline

      Clase 5

      Login requerido

    • play_circle_outline

      Clase 6

      Obtener al usuario actual

    • play_circle_outline

      Clase 7

      Archivo de constantes

  • Módulo 7 | 10 clases

    CRUD - Crear, Leer, Actualizar y Eliminar

    expand_more
    • play_circle_outline

      Clase 1

      Modelo de tareas

    • play_circle_outline

      Clase 2

      Formulario para crear tareas

    • play_circle_outline

      Clase 3

      Crear tareas

    • play_circle_outline

      Clase 4

      Listar tareas

    • play_circle_outline

      Clase 5

      Editar estructura de la tabla

    • play_circle_outline

      Clase 6

      Editar tarea

    • play_circle_outline

      Clase 7

      Eliminar tarea

    • play_circle_outline

      Clase 8

      Paginación

    • play_circle_outline

      Clase 9

      Mostrar tarea

    • play_circle_outline

      Clase 10

      Clase active

  • Módulo 8 | 3 clases

    Servidor de correos

    expand_more
    • play_circle_outline

      Clase 1

      Configurar servidor de correos

    • play_circle_outline

      Clase 2

      Enviar correos

    • play_circle_outline

      Clase 3

      Enviar correos de forma asíncrona

  • Módulo 9 | 5 clases

    Extras

    expand_more
    • play_circle_outline

      Clase 1

      Introducción al bloque

    • play_circle_outline

      Clase 2

      Shell Interactivo

    • play_circle_outline

      Clase 3

      Pruebas unitarias

    • play_circle_outline

      Clase 4

      Pruebas sobre nuestro modelo

    • play_circle_outline

      Clase 5

      Migraciones

WSGI python

arrow_back Siguiente arrow_forward
Curso Profesional de Desarrollo Web con Python