[Domine Python en 100 días] Día 48: Desarrollo web de Python_Interfaz y uso de la puerta de enlace del servidor de red WSGI

Tabla de contenido

1 interfaz WSGI

1.1 Introducción al CGI

1.2 Introducción a WSGI

1.3 Definir la interfaz WSGI

1.3.1 Aplicación

1.3.2 Servidor

1.4 Ejemplo de uso de la interfaz WSGI

1.5 Ventajas de la interfaz WSGI


1 interfaz WSGI

        La sección anterior implementó un servidor estático, pero el desarrollo web actual rara vez utiliza páginas estáticas puras y páginas más dinámicas que involucran funciones más interactivas. Por ejemplo, en las funciones de inicio de sesión y registro del sitio web, cuando los usuarios inician sesión en el sitio web, deben ingresar su nombre de usuario y contraseña y luego enviar los datos. El servidor web no puede manejar datos relacionados con el usuario pasados ​​en el formulario, por lo que surgió CGI.

1.1 Introducción al CGI

        El nombre completo de CGI es "Common Gateway Interface", que es una interfaz estándar para ejecutar programas o scripts externos en un servidor web. A través de CGI, el servidor web puede comunicarse con programas externos (generalmente lenguajes de secuencias de comandos como Perl, Python, PHP, etc.), pasar solicitudes de los usuarios a estos programas y luego enviar la salida del programa al navegador del usuario.

       flujo de trabajo CGI

Aquí hay información importante sobre CGI:

  1. Generación de páginas web dinámicas: En los inicios de Internet, las páginas web solían ser estáticas, es decir, creadas previamente y almacenadas en el servidor. Pero con el desarrollo de Internet, las personas necesitan poder generar contenido dinámicamente en función de las solicitudes de los usuarios, lo que lleva al surgimiento del CGI.

  2. Solicitud y respuesta HTTP: cuando un usuario solicita un script CGI en un navegador, el servidor web analizará la ruta CGI en la solicitud y pasará la información de la solicitud al script. El script puede procesar esta información, generar contenido dinámico y enviarlo de vuelta al servidor como una respuesta HTTP, que finalmente se pasa al navegador del usuario.

  3. Lenguaje de programación: los scripts CGI se pueden escribir en varios lenguajes de programación como Perl, Python, PHP, Ruby, etc. Estos lenguajes de programación permiten a los desarrolladores procesar datos, generar HTML, interactuar con bases de datos y otras operaciones para implementar funciones complejas de páginas web.

  4. Consideraciones de seguridad: debido a que los scripts CGI implican la interacción con programas externos, existen algunos riesgos de seguridad. La implementación incorrecta puede provocar vulnerabilidades de seguridad, como secuencias de comandos entre sitios (XSS) o inyección de código. Por lo tanto, la seguridad debe ser una consideración importante al desarrollar e implementar scripts CGI.

  5. Tecnologías alternativas: aunque CGI era el método estándar para generar páginas web dinámicas en los primeros días, a medida que la tecnología evolucionó, surgieron alternativas más eficientes y seguras como FastCGI y WSGI (para Python). Estas técnicas intentan reducir la sobrecarga de CGI, mejorar el rendimiento y proporcionar mayor seguridad.

        En general, CGI es una de las etapas importantes en el desarrollo de Internet, que abrió la puerta a la generación dinámica de páginas web, brindando más interactividad y funcionalidad al sitio web. Sin embargo, con el tiempo, surgieron tecnologías más avanzadas que reemplazaron los métodos CGI tradicionales.

1.2 Introducción a WSGI

      WSGI significa "Web Server Gateway Interface", que es una interfaz canónica para la comunicación entre aplicaciones web Python y servidores web. En comparación con el CGI tradicional, WSGI es más eficiente y flexible y puede interactuar entre diferentes servidores web y marcos de aplicaciones.

 flujo de trabajo WSGI

1.3 Definir la interfaz WSGI

        WSGI (Web Server Gateway Interface) es una interfaz estándar entre una aplicación web Python y un servidor web, que permite a los desarrolladores interactuar entre la aplicación y el servidor. WSGI facilita la escritura de aplicaciones web que sean portátiles y compartibles entre diferentes servidores.

        WSGI define dos componentes principales: aplicación y servidor.

        La aplicación es una función de Python que recibe dos parámetros: un diccionario que contiene información de solicitud HTTP y una función para enviar la respuesta.

        El servidor es responsable de analizar la información de la solicitud en un diccionario y vincular la función de respuesta con la aplicación.

La siguiente es una explicación detallada de la interfaz WSGI y un ejemplo simple:

1.3.1 Aplicación

  • Una aplicación WSGI es una función de Python invocable (generalmente un método de un objeto) que toma dos argumentos: un diccionario que contiene la información de la solicitud environy una función para enviar la respuesta start_response.
  • La aplicación environbusca información de la solicitud, como el método de solicitud, la ruta, los parámetros de consulta, etc., en el diccionario.
  • start_responseFunción utilizada para enviar el código de estado de respuesta y la información del encabezado HTTP.

1.3.2  Servidor (Servidor)

  • El servidor WSGI analiza la solicitud HTTP y almacena la información de la solicitud en environun diccionario.
  • El servidor necesita ejecutar la aplicación, pasar environy start_responsecomo parámetros a la aplicación y enviar los datos de respuesta devueltos por la aplicación al cliente.

1.4 Ejemplo de uso de la interfaz WSGI

        El siguiente es un ejemplo para ilustrar el uso de la interfaz WSGI.

(1) Cree una estructura de archivos:wsgi_example cree una carpeta denominada en su directorio de trabajo y cree los siguientes archivos en ella.

  • app.py: código de aplicación WSGI
  • templatesCarpeta: utilizada para almacenar plantillas HTML
  • templates/index.html: archivo de plantilla HTML

Plantilla index.html: cree una plantilla HTML denominada en templatesla carpeta .index.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>WSGI Example</title>
  <style>
    /* 设置全局样式 */
    body {
      font-family: Arial, sans-serif;
      background-color: #f0f0f0;
      margin: 0;
      padding: 0;
    }
    /* 设置页眉样式 */
    header {
      background-color: #333;
      color: #fff;
      padding: 1rem;
      text-align: center;
    }
    /* 设置内容区域样式 */
    .content {
      text-align: center;
      padding: 2rem;
      background-color: #fff;
      box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
      border-radius: 10px;
      margin: 2rem auto;
      width: 60%;
    }
    /* 设置时间区域样式 */
    #datetime {
      font-size: 24px;
      color: #009688; /* 修改时间颜色 */
      font-weight: bold;
    }
  </style>
</head>
<body>
  <header>
    <h1>WSGI Example</h1>
  </header>
  <div class="content">
    <h2>Hello, Dynamic WSGI World!</h2>
    <!-- 用于显示实时更新的本地日期和时间 -->
    <p id="current-datetime">Current date and time: <span id="datetime"></span></p>
  </div>

  <script>
    // 更新本地日期和时间的函数
    function updateCurrentDateTime() {
      const datetimeElement = document.getElementById("datetime");
      const now = new Date();
      const options = { year: 'numeric', month: 'long', day: 'numeric', hour: '2-digit', minute: '2-digit', second: '2-digit', timeZoneName: 'short' };
      const currentDateTime = now.toLocaleString('en-US', options);
      datetimeElement.textContent = currentDateTime;
    }

    // 每秒更新时间
    setInterval(updateCurrentDateTime, 1000);
    updateCurrentDateTime(); // 首次加载页面时更新日期和时间
  </script>
</body>
</html>

app.py, aplicación WSGI: en app.pyeste archivo, escriba el código de la aplicación WSGI.

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

# 创建一个 Jinja2 环境,用于加载模板
env = Environment(loader=FileSystemLoader('./templates'))

# WSGI 应用程序
def app(environ, start_response):
    status = '200 OK'
    headers = [('Content-type', 'text/html')]
    start_response(status, headers)
    
    # 使用 Jinja2 渲染模板
    template = env.get_template('index.html')
    current_time = environ['CURRENT_TIME']
    rendered_template = template.render(current_time=current_time)
    
    return [rendered_template.encode()]

if __name__ == '__main__':
    with make_server('', 3000, app) as httpd:
        print("Serving on port 3000...")
        httpd.serve_forever()

2 Ejecute la aplicación: navegue hasta la carpeta en la línea de comando wsgi_exampley ejecute el siguiente comando para iniciar el servidor.

python app.py

3 Visite la página: abra el navegador y visite http://localhost:3000, verá una página con contenido generado dinámicamente. La página se muestra de la siguiente manera:

      En el ejemplo anterior, utilizamos el motor de plantillas Jinja2 para representar plantillas HTML e insertar contenido dinámico. app.pyLa aplicación en el archivo pasa la hora actual como contenido dinámico a la plantilla, que inserta la hora en la página.

        Tenga en cuenta que los ejemplos anteriores solo se utilizan para demostrar el uso de WSGI. En proyectos reales, se pueden usar marcos y bibliotecas más maduros para manejar plantillas, contenido dinámico, acceso a bases de datos, etc.

1.5  Ventajas de la interfaz WSGI

  1. Portabilidad: las aplicaciones escritas utilizando la interfaz WSGI pueden ejecutarse en diferentes servidores WSGI, lo que permite la portabilidad entre diferentes servidores.
  2. Interoperabilidad: WSGI permite que diferentes aplicaciones y servidores se comuniquen de manera consistente, facilitando la interoperabilidad de diferentes componentes en el ecosistema web.
  3. Rendimiento: los servidores WSGI generalmente pueden manejar solicitudes HTTP de manera más eficiente, proporcionando un mejor rendimiento.

        En resumen, WSGI (Web Server Gateway Interface) es un estándar de interfaz que define la comunicación entre las aplicaciones web Python y los servidores. A través de una interfaz unificada, los desarrolladores pueden crear e implementar aplicaciones web de manera más flexible.

Supongo que te gusta

Origin blog.csdn.net/qq_35831906/article/details/132577252
Recomendado
Clasificación