Red informática: Diseño en capas de HTML Framework

计算机网络中的OSI七层模型

计算机网络中的OSI(Open Systems Interconnection)七层模型Es un marco teórico para describir el proceso de comunicación de datos en redes informáticas. El modelo OSI 计算机网络通信divide el proceso en siete niveles, y cada nivel tiene sus funciones y protocolos específicos. Esta estructura en capas es útil para la investigación y la comprensión de las redes informáticas 通信原理. Las siguientes son las diversas capas del modelo OSI de siete capas y sus funciones principales:

imagen.png

应用层Es la séptima capa del modelo OSI y también es la interfaz entre 网络应用程序y . 网络协议La capa de aplicación es principalmente responsable de proporcionar a los usuarios diversos servicios de aplicaciones, como transferencia de archivos, correo electrónico y navegación web.

表示层Es la sexta capa del modelo OSI, que se encarga principalmente de procesar la representación de los datos transmitidos en la red, como los datos 加密、解密、压缩、解压缩. La capa de presentación asegura la comunicación entre diferentes sistemas 数据兼容性.

会话层Es la quinta capa del modelo OSI y es principalmente responsable de establecer, mantener y finalizar sesiones de comunicación entre aplicaciones. La capa de sesión proporciona mecanismos de sincronización y confirmación para el intercambio de datos.

传输层Es la cuarta capa del modelo OSI, que es principalmente responsable de proporcionar servicios de transmisión de datos confiables de extremo a extremo entre el host de origen y el host de destino. La capa de transporte logra una transmisión de datos confiable al segmentar, encapsular y volver a ensamblar los datos. Los protocolos comunes de la capa de transporte incluyen TCP(传输控制协议)y UDP(用户数据报协议).

网络层Es la tercera capa del modelo OSI, que es la principal responsable de 数据包从源主机路enviar hosts al host de destino. La capa de red es la principal responsable 逻辑寻址、路由选择和分组转发. Los protocolos de capa de red comunes incluyen IP(互联网协议)y ICMP(互联网控制报文协议).

数据链路层Es la segunda capa del modelo OSI y se encarga principalmente de encapsular los paquetes de datos de la capa de red en tramas y transmitirlos en la misma LAN. La capa de enlace de datos es principalmente responsable del direccionamiento físico, tramas de datos, detección de errores y control de flujo. Los protocolos comunes de la capa de enlace de datos incluyen, 以太网(Ethernet)、令牌环(Token Ring)和无线局域网(Wi-Fi)etc.

物理层Es la primera capa del modelo OSI y es principalmente responsable de la transmisión transparente de flujos de bits en medios físicos. La capa física se centra principalmente en cuestiones como las interfaces de hardware, las características eléctricas, las fibras ópticas y la transmisión inalámbrica.

El modelo OSI de siete capas proporciona un marco general para ayudar a estudiar y comprender los principios de comunicación en las redes informáticas. En aplicaciones prácticas solemos utilizar TCP/IP四层模型, incluye 应用层、传输层、网络层和链路层, y tiene cierta correspondencia con el modelo OSI.

La necesidad de un framework HTML

HTML框架La razón principal del diseño en capas es mejorar la legibilidad, el mantenimiento y la reutilización del código. Las capas HTML框架pueden mejorar la estructura y la lógica del proyecto general, lo que facilita a los desarrolladores comprender y modificar mejor el código. Un diseño en capas tiene las siguientes ventajas:

  1. Mejore la legibilidad: al dividir el marco HTML en diferentes capas, la estructura del código se puede aclarar, lo que ayuda a los desarrolladores a comprender rápidamente la función del código.
  2. Facilidad de mantenimiento: el diseño en capas ayuda a modularizar las funciones, de modo que un módulo se puede modificar o reemplazar fácilmente sin afectar otras partes del código. Esto ayuda a mejorar la mantenibilidad del proyecto.
  3. Reutilización: la superposición del marco HTML puede extraer partes comunes en componentes reutilizables, de modo que estos componentes puedan reutilizarse en diferentes proyectos y mejorar la eficiencia del desarrollo.
  4. Adaptabilidad: el diseño en capas puede hacer que el marco HTML sea más fácil de adaptar a diferentes dispositivos y tamaños de pantalla, mejorando la compatibilidad del proyecto.
  5. Facilidad de colaboración: en proyectos grandes, a menudo hay varios desarrolladores involucrados. A través del diseño en capas, los desarrolladores pueden concentrarse en sus propios módulos, lo que reduce los conflictos de código y los costos de comunicación.

HTML框架的组成

El marco HTML incluye Application层``middleware层``route层``codec层``transport层 Application层La capa de aplicación generalmente incluye código relacionado con la lógica comercial, como el controlador (Controller), la vista (View) y el modelo (Model) de una aplicación web. La función principal de la capa de aplicación es procesar las solicitudes de los usuarios y devolver las respuestas correspondientes.

Middleware层La capa de middleware es una capa entre la capa de aplicación y el marco subyacente, responsable de manejar algunas funciones comunes, como autenticación, autorización, almacenamiento en caché, registro, etc. La capa de middleware ayuda a separar la lógica comercial de las funciones comunes, lo que hace que la capa de aplicación sea más concisa y fácil de mantener.

Route层La capa de enrutamiento es responsable de procesar las URL y los métodos HTTP (como GET, POST, etc.) de las solicitudes HTTP y enviar las solicitudes a los controladores y métodos correspondientes. La función principal de la capa de enrutamiento es ubicar códigos de función específicos de acuerdo con el mapeo de URL.

Codec层La capa de códec es responsable de codificar y decodificar datos. En el desarrollo web, la codificación y la decodificación suelen implicar el procesamiento de tecnologías front-end como HTML, CSS y JavaScript, así como el procesamiento de formatos de intercambio de datos como JSON y XML. La función principal de la capa de códec es convertir los datos a un formato específico para su transmisión y procesamiento entre diferentes capas.

Transport层La capa de transporte es responsable de manejar la comunicación de red subyacente, como el uso de protocolos como TCP y UDP. En el desarrollo web, la capa de transporte suele implicar el procesamiento del protocolo HTTP, incluida la creación, el envío y la recepción de solicitudes y respuestas. La función principal de la capa de transporte es garantizar la transmisión confiable de datos y el enrutamiento correcto en la red.

imagen.pngEstas capas pueden variar en diferentes marcos y escenarios en aplicaciones reales. Sin embargo, a juzgar por la descripción que proporcionó, son respectivamente responsables de manejar diferentes funciones en la aplicación web y juntos constituyen un marco de desarrollo web completo.

HTML框架和服务端客户端之间的通信对比

imagen.png

Application层diseño de la capa de aplicación

El diseño de la capa de aplicación es principalmente para establecer varios tipos 接口para su 路由uso.

Por ejemplo, en el proyecto grande en la versión avanzada del backend de bytes 注册接口.

/douyin/user/register/ - interfaz de registro de usuario

Cuando un nuevo usuario se registre, solo proporcione un nombre de usuario, contraseña y apodo, y el nombre de usuario debe ser único. Devuelve la identificación del usuario y el token de permiso después de que la creación sea exitosa.

Tipo de interfaz

CORREO

Definición de interfaz

go
复制代码
syntax = "proto2";
package douyin.core;

message douyin_user_register_request {
  required string username = 1; // 注册用户名,最长32个字符
  required string password = 2; // 密码,最长32个字符
}

message douyin_user_register_response {
  required int32 status_code = 1; // 状态码,0-成功,其他值-失败
  optional string status_msg = 2; // 返回状态描述
  required int64 user_id = 3; // 用户id
  required string token = 4; // 用户鉴权token
}
go
复制代码
func Register(username, password string) (id int64, token int64, err error) {
   if len(username) > 32 {
      return 0, 0, errors.New("用户名过长,不可超过32位")
   }
   if len(password) > 32 {
      return 0, 0, errors.New("密码过长,不可超过32位")
   }
   // 先查布隆过滤器,不存在直接返回错误,降低数据库的压力
   if userNameFilter.TestString(username) {
      return 0, 0, errors.New("用户名已经存在!")
   }
   //雪花算法生成token
   node, err := snowflake.NewNode(1) //这里的userIdInt64就是 User.Id(主键)
   if err != nil {
      log.Println("雪花算法生成id错误!")
      log.Println(err)
   }
   token1 := node.Generate().Int64()
   tokenStr := strconv.FormatInt(token1, 10)
   user := domain.User{}
   // 再查缓存
   data, err := dao.RedisClient.Get(context.Background(), tokenStr).Result()
   if err == redis.Nil {
      fmt.Println("token does not exist")
   } else if err != nil {
      fmt.Println("Error:", err)
   } else {
      num, err := strconv.ParseInt(data, 10, 64)
      if err != nil {
         fmt.Println("Error:", err)
         return num, 0, err
      }

      return num, token1, nil
   }
   //在查数据库
   user = domain.User{}
   dao.DB.Model(&domain.User{}).Where("name = ?", username).Find(&user)
   if user.Id != 0 {
      return 0, 0, errors.New("用户已存在")
   }
   user.Name = username
   // 加密存储用户密码
   user.Salt = randSalt()
   buf := bytes.Buffer{}
   buf.WriteString(username)
   buf.WriteString(password)
   buf.WriteString(user.Salt)
   pwd, err1 := bcrypt.GenerateFromPassword(buf.Bytes(), bcrypt.MinCost)
   if err1 != nil {
      return 0, 0, err
   }
   user.Pwd = string(pwd)

   //存在mysql里边
   dao.DB.Model(&domain.User{}).Create(&user)
   //再把用户id作为键 用户的所有信息作为值存在其中
   //用户信息的缓存是 保存在redis中 一个以id为键 user json为值
   jsonuser, err1 := MarshalUser(user)
   if err1 != nil {
      fmt.Println("err1", err1)
      return 0, 0, err1
   }
   err = dao.RedisClient.Set(context.Background(), strconv.FormatInt(user.Id, 10), jsonuser, 0).Err()
   if err != nil {
      fmt.Println("err", err)
      return 0, 0, err
   }
   // 布隆过滤器中加入新用户
   userIdFilter.AddString(strconv.FormatInt(user.Id, 10))
   userNameFilter.AddString(username)
   return user.Id, token1, nil
}

La función de registro de esta interfaz se realiza: toda la información se almacena en mysql, por supuesto, la información también existe en redis y, por supuesto, el nombre de usuario también se almacena en el filtro Bouillon. Al recibir el nombre de usuario del usuario, primero verificamos si está en el filtro Bouillon Si existe, devolverá directamente err, si no existe, entonces consúltelo en redis, porque redis es más liviano que mysql, por lo que primero debemos verificarlo en redis, y si puede' t se encuentra, luego verifíquelo en mysql, no puedo encontrarlo, lo que indica que no me he registrado, puede registrarse.

命名规范

imagen.pngSiga los principios de las convenciones de nomenclatura.

Middleware层中间件

El middleware en el framework gin se divide en middleware global y middleware local. Entonces, ¿qué es el software intermedio? El middleware es un software que proporciona servicios y funcionalidades comunes a las aplicaciones. La gestión de datos, el servicio de aplicaciones, la mensajería, la autenticación y la gestión de API a menudo pasan por un middleware. En el marco de gin, todas nuestras interfaces API deben pasar a través de nuestro middleware y podemos realizar algún procesamiento de intercepción en el middleware.

Modelos comunes de middleware

imagen.png

software intermedio global

Esto se registra cuando se inicia el servicio y global significa que todas las interfaces API pasarán por aquí. El middleware de Gin se Useconfigura a través de un método, que recibe un parámetro variable, por lo que podemos configurar varios middleware al mismo tiempo.

Primero define de la siguiente manera

go
复制代码
// 1.创建路由
r := gin.Default()  //默认带Logger(), Recovery()这两个内置中间件
r:= gin.New()      //不带任何中间件
// 注册中间件  
r.Use(MiddleWare())
r.Use(MiddleWare2())

Por favor, tenga en cuenta

gin.Default()De forma predeterminada, se utilizan Loggermiddleware Recovery, entre los cuales: El middleware registrador escribe registros gin.DefaultWriterincluso si está configurado GIN_MODE=release. El middleware de recuperación hará recovercualquier cosa panic. Si hay pánico, se escribirá un código de respuesta 500. Si no desea utilizar los dos middleware predeterminados anteriores, puede crear gin.New()una nueva ruta sin ningún middleware predeterminado.

go
复制代码
// 定义中间
func MiddleWare() gin.HandlerFunc {
    return func(c *gin.Context) {
        t := time.Now()
        fmt.Println("中间件开始执行了")
        // 设置变量到Context的key中,可以通过Get()取
        c.Set("request", "这是中间件设置的值")
        status := c.Writer.Status()
        fmt.Println("中间件执行完毕", status)        
        t2 := time.Since(t)
        fmt.Println("time:", t2)
    }
}

Luego inicie nuestro servicio y acceda a cualquier interfaz para ver el resultado de la siguiente manera

Esta es la solicitud que primero llega al middleware y luego llega a nuestra interfaz API. En el middleware, puede establecer la variable en la clave del Contexto y luego obtener el valor en nuestra interfaz API.

go
复制代码
        r.GET("/", func(c *gin.Context) {
            // 取值
            req, _ := c.Get("request")
            fmt.Println("request:", req)
            // 页面接收
            c.JSON(200, gin.H{"request": req})
        })

En este momento, puede ver que el valor establecido por el middleware es

nextEl método se utiliza en el middleware, lo que 后续中间件significa ejecutar el procesamiento de la solicitud (incluido el middleware no ejecutado y el procesamiento del método GET que definimos, si se registran varios middleware continuamente, se ejecutarán en orden de primero en entrar, último en salir). next就去执行下一个中间件里的next前面方法.

go
复制代码
        // 执行函数
        c.Next()
        // 中间件执行完后续的一些事情

software intermedio parcial

El middleware parcial significa que algunas interfaces surtirán efecto y solo se usarán localmente. En este momento, visite http:127.0.0.1:8000/ para ver la impresión del registro del middleware y otras interfaces API no aparecerán.

go
复制代码
   //局部中间件使用
    r.GET("/", MiddleWare(), func(c *gin.Context) {
        // 取值
        req, _ := c.Get("request")
        fmt.Println("request:", req)
        // 页面接收
        c.JSON(200, gin.H{"request": req})
    })

middleware integrado de ginebra

go
复制代码

func BasicAuth(accounts Accounts) HandlerFunc

func BasicAuthForRealm(accounts Accounts, realm string) HandlerFunc

func Bind(val interface{}) HandlerFunc

func ErrorLogger() HandlerFunc

func ErrorLoggerT(typ ErrorType) HandlerFunc

func Logger() HandlerFunc

func LoggerWithConfig(conf LoggerConfig) HandlerFunc

func LoggerWithFormatter(f LogFormatter) HandlerFunc

func LoggerWithWriter(out io.Writer, notlogged ...string) HandlerFunc

func Recovery() HandlerFunc

func RecoveryWithWriter(out io.Writer) HandlerFunc

func WrapF(f http.HandlerFunc) HandlerFunc

func WrapH(h http.Handler) HandlerFunc

Resumir

A través del middleware personalizado, podemos interceptar fácilmente las solicitudes para hacer algunas cosas que necesitamos hacer, como el registro, la verificación de autorización, varios filtros, etc.

Digresión

En este primer año de tecnología de rápido crecimiento, la programación es como un boleto a un mundo de infinitas posibilidades para muchas personas. En la alineación estelar de los lenguajes de programación, Python es como la superestrella líder. Con su sintaxis concisa y fácil de entender y sus potentes funciones, se destaca y se convierte en uno de los lenguajes de programación más populares del mundo.


El rápido ascenso de Python es extremadamente beneficioso para toda la industria , pero " 人红是非多" ha provocado que agregue muchas críticas, pero aún no puede detener su gran impulso de desarrollo.

¿Python seguirá siendo relevante e intacto durante el resto de la próxima década? Hoy, vamos a analizar los hechos y disipar algunos conceptos erróneos.

Si está interesado en Python y desea obtener un salario más alto aprendiendo Python, ¡entonces el siguiente conjunto de materiales de aprendizaje de Python debe serle útil!

Los materiales incluyen: paquete de instalación de Python + código de activación, desarrollo web de Python, rastreador de Python, análisis de datos de Python, inteligencia artificial, aprendizaje automático y otros tutoriales de aprendizaje. Incluso los principiantes con 0 conceptos básicos pueden entender y comprender. ¡Siga el tutorial y lo llevará a aprender Python sistemáticamente desde cero conceptos básicos!

1. Rutas de aprendizaje en todas las direcciones de Python

La ruta de todas las direcciones en Python es organizar los puntos técnicos comúnmente utilizados de Python para formar un resumen de los puntos de conocimiento en varios campos. Su utilidad radica en que puede encontrar los recursos de aprendizaje correspondientes de acuerdo con los puntos de conocimiento anteriores para asegurarse de que aprende de manera más integral.
inserte la descripción de la imagen aquí
2. Software de aprendizaje Python

Si un trabajador quiere hacer un buen trabajo, primero debe afilar sus herramientas. ¡El software de desarrollo comúnmente utilizado para aprender Python está aquí!
inserte la descripción de la imagen aquí
3. Video de aprendizaje introductorio de Python

También hay muchos videos de aprendizaje adecuados para comenzar con los conceptos básicos de 0. Con estos videos, puede comenzar fácilmente con Python ~inserte la descripción de la imagen aquí

4. Ejercicios de Python

Después de cada lección de video, hay preguntas de práctica correspondientes, ¡puedes probar los resultados de aprendizaje, jaja!
inserte la descripción de la imagen aquí

Cinco, caso de combate real de Python

La teoría óptica es inútil. Tienes que aprender a escribir códigos junto con ella, y luego puedes aplicar lo que has aprendido en la práctica. En este momento, puedes aprender de algunos casos prácticos. Esta información también está incluida~inserte la descripción de la imagen aquí

6. Materiales de entrevista de Python

¡Después de haber aprendido Python, podemos salir y encontrar un trabajo con las habilidades! Las siguientes preguntas de la entrevista son todas de las principales empresas de Internet, como Ali, Tencent, Byte, etc., y algunos jefes de Ali han dado respuestas autorizadas. Después de leer este conjunto de materiales de entrevista, creo que todos pueden encontrar un trabajo satisfactorio.
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
7. Recopilación de información

El conjunto completo de materiales de aprendizaje para la versión completa de Python mencionada anteriormente se cargó en el sitio web oficial de CSDN. Aquellos que lo necesiten pueden escanear el código QR de la certificación oficial de CSDN a continuación en WeChat para recibirlo de forma gratuita.

Supongo que te gusta

Origin blog.csdn.net/pythonhy/article/details/132322134
Recomendado
Clasificación