FastAPI desde la entrada hasta el combate real (9): configuración de parámetros de cookies y encabezados

El artículo anterior registró el contenido relacionado con la autenticación front-end. Esta nota registra principalmente el contenido relacionado con el encabezado de la solicitud, incluido un análisis del mensaje de solicitud de HTTP, configuración de cookies y parámetros de fastapi, configuración de parámetros de encabezado de solicitud de fastapi, etc.

Solicitud HTTP

El mensaje de solicitud HTTP se divide en tres partes: línea de solicitud, encabezado de solicitud y cuerpo de solicitud:

línea de solicitud

La línea de solicitud consta de tres partes: método de solicitud, dirección de solicitud y versión del protocolo. Generalmente, una solicitud se envía a través de la línea de solicitud

encabezado de solicitud

El encabezado de la solicitud es generalmente una serie de atributos, todos los cuales son pares clave-valor.El servidor obtiene la información básica del cliente a través del encabezado de la solicitud.

cuerpo de solicitud

Todo el mundo está familiarizado con el cuerpo de la solicitud, que son los datos enviados por el cliente al servidor.

imagen-20221128182219550

Parámetros de cookies

Al igual que la configuración anterior de los parámetros de ruta y los parámetros de consulta, puede usar los métodos en fastapi para definir los parámetros de las cookies.

Pero antes de definir los parámetros de las cookies, es necesario probar los parámetros de las cookies. Sabemos por el capítulo anterior que el servidor responde a las cookies al front-end, por lo que primero debemos enviar una cookie al front-end.

@app05.get("/stu05/setcookie")
def get_setcookie(response:Response):
    response.set_cookie("cookie1","cookie111111111111")
    response.set_cookie("cookie2","cookie222222222222")
    response.set_cookie("cookie3", "cookie333333333333")
    return {
    
    "result":"设置cookie成功"}

Aquí, el método de respuesta de fastapi se usa para enviar una cookie set_cookie al front-end. Después de recibir la respuesta, el front-end tiene una cookie. La operación específica y la aplicación detallada se describirán en detalle en un capítulo más adelante. Ahora es principalmente para probar los parámetros de las cookies recibidas.

imagen-20221128205354624

Luego visitamos un enlace al azar, ¡y creemos hola mundo por defecto! Encontrará que la cookie ya existe.

imagen-20221128205524793

Definir parámetros de cookies

@app05.get("/stu05/getcookie")
def stu05_read_cookie(
        cookie1:Optional[str] = Cookie(None),
        cookie2:Optional[str] = Cookie(None)
):
    return {
    
    "cookie1":cookie1,"cookie2":cookie2} # 定义Cookie参数需要使用Cookie类,否则就是查询参数

Con la cookie, puede recibir el parámetro de cookie a través del método fastapi, declarar un parámetro de cookie con la cookie y luego devolver el parámetro de cookie recibido. Como ya hay una cookie, puede encontrar que la solicitud se ha completado al probar directamente en el documento api.

imagen-20221128205846938

Parámetro de encabezado

Antes de eso, comprendamos brevemente la diferencia entre encabezado y encabezados:

El encabezado corresponde al cuerpo, que es la parte del encabezado de la solicitud o respuesta, y es una pluralidad de líneas de texto separadas por CRLF.
Hay dos CRLF consecutivos después del encabezado, y la parte posterior es el cuerpo. Por lo general, GET no tiene cuerpo.
encabezados se refiere a varias líneas de texto en el párrafo del encabezado.

headers es el contenido del encabezado.

@app05.get("/stu05/getheader")
def stu05_read_header(
        user_agent:Optional[str] = Header(None)
):
    return {
    
    "User-agent":user_agent}

Al igual que otros parámetros, puede declarar un parámetro de encabezado con la clase de encabezado de fastapi. El user_agent anterior es un parámetro de encabezado. También se analizará como un parámetro de consulta sin la declaración de clase de encabezado.

imagen-20221128210116404

conversión automática

La mayoría de los encabezados estándar están '-'separados por un "guión", es decir, un signo menos, por ejemplo user-agent, pero tales variables no son válidas en Python. Por lo tanto, no puede usar exactamente el mismo método de escritura al definir parámetros en python.En este caso, FastAPI Headerconvertirá los caracteres del nombre del parámetro de guiones bajos ( _) a guiones ( -) de forma predeterminada para extraer y registrar headers;

Al mismo tiempo, HTTP headersno distinguen entre mayúsculas y minúsculas, por lo que pueden declararse usando el estilo estándar de Python, es decir, pueden usarse como de costumbre en el código de Python user_agent, sin necesidad de escribir en mayúscula la primera letra como User_Agento similar;

Por supuesto, FastAPI también brinda la función de deshabilitar la conversión de guiones bajos, es decir, se puede configurar bajo los parámetros correspondientes convert_underscores=False, de la siguiente manera, pero algunos servidores y servidores proxy HTTP no permiten el uso de guiones bajos headers, por lo que puede causar la situación de que el no se puede recibir información, por lo que el valor predeterminado es Truecan;

user_agent:Optional[str] = Header(None,convert_underscores=False)

Encabezados duplicados

En la práctica, es completamente posible recibir encabezados duplicados. Es decir, un parámetro bajo el mismo encabezado tiene múltiples valores.

Para este caso, use una lista directamente en la declaración de tipo para definir estos casos.

@app05.get("/stu05/getheaders")
def stu05_read_headers(
        paramlist:Optional[List[str]] = Header(None)
):
    return {
    
    "paramlist":paramlist}

El código anterior declara un parámetro Listde tipo Header, y luego Postman puede mostrar más directamente lo que significan los encabezados repetidos, de la siguiente manera:

imagen-20221128215556195

código fuente

# -*- coding: utf-8 -*-
# @Time: 2022/11/28 18:27
# @Author: MinChess
# @File: stu05.py
# @Software: PyCharm

from fastapi import APIRouter,Response,Cookie,Header
from pydantic import BaseModel
from typing import Optional,List

app05 = APIRouter()


@app05.get("/stu05/setcookie")
def get_setcookie(response:Response):
    response.set_cookie("cookie1","cookie111111111111")
    response.set_cookie("cookie2","cookie222222222222")
    response.set_cookie("cookie3", "cookie333333333333")
    return {
    
    "result":"设置cookie成功"}

@app05.get("/stu05/getcookie")
def stu05_read_cookie(
        cookie1:Optional[str] = Cookie(None),
        cookie2:Optional[str] = Cookie(None)
):
    '''
    :param cookie1:
    :param cookie2:
    :return:
    '''
    return {
    
    "cookie1":cookie1,"cookie2":cookie2} # 定义Cookie参数需要使用Cookie类,否则就是查询参数

@app05.get("/stu05/getheader")
def stu05_read_header(
        user_agent:Optional[str] = Header(None)
):
    return {
    
    "User-agent":user_agent}

@app05.get("/stu05/getheaders")
def stu05_read_headers(
        paramlist:Optional[List[str]] = Header(None)
):
    return {
    
    "paramlist":paramlist}

¡Gracias por leer!
Enlace del blog: FastAPI desde la entrada hasta el combate real (9): configuración de parámetros de cookies y encabezados

¡Bienvenido a seguir el mini programa personal del blogger!

Supongo que te gusta

Origin blog.csdn.net/qq_45730223/article/details/128088473
Recomendado
Clasificación