Django No. 16-3 esquemas para devolver los datos a la página frontal como tipo de datos json

I. Introducción

El marco ORM de Django proporciona muchos métodos para consultar datos de tablas de bases de datos, y los diferentes métodos devuelven resultados diferentes. Los diferentes métodos tienen sus propios escenarios de uso correspondientes.

El número de los principales métodos de consulta comúnmente utilizados es 13, y el valor de retorno del método es un objeto iterable Método QuerySet solo estos 8 métodos: all (), filter (), exclude (), order_by (), reverse (), values ​​() , lista_valores (), distinto ();

Si el personal de front-end requiere que el tipo de datos del valor de retorno de la interfaz sea json, el personal de back-end debe convertir indirectamente el valor del objeto iterable QuerySet al valor del objeto no iterable y el no json tipo de datos a través de otros métodos y convertir el valor Cuando es el valor de uno de los parámetros de entrada cuando se inicializa la clase JsonResponse, el objeto después de la inicialización de la clase JsonResponse finalmente se proporciona al personal de front-end como el retorno de la interfaz final valor.

El llamado esquema de convertir el valor de retorno de la interfaz al valor del objeto iterable QuerySet indirectamente en el valor del tipo de datos json a través de otros métodos, actualmente solo hay tres esquemas (solo necesitamos recordar estos tres):

⑴. Opción 1: Usar serializadores                                                 

     Función principal: convierte el valor de retorno de la interfaz al valor del objeto iterable QuerySet al valor del tipo de datos json (es decir, el tipo de datos en el lenguaje Python es el tipo de datos de la cadena);

    (Este tipo de programa solo necesita ser entendido, básicamente no es necesario)

⑵. Opción 2: Utilice model_to_dict                                           

     Función principal: convierte el valor de retorno de la interfaz al valor del objeto iterable QuerySet en el valor del tipo de datos de dict en el lenguaje Python;

    (Este tipo de programa solo necesita ser entendido, básicamente no es necesario)

⑶. Esquema 3: use el valor del método combinado con la lista de métodos                         

     Función principal: convierte el valor de retorno de la interfaz al valor del objeto iterable QuerySet en el valor del tipo de datos del tipo de datos de lista en el lenguaje Python;

    (Este tipo de esquema es el más simple, básicamente usaremos este, debemos enfocarnos en saber cómo usarlo)

detalle:

① Pregunta: ¿Por qué el tipo de datos devueltos por la función de vista devuelve el valor a la página de inicio a veces necesita ser json?

Probablemente la respuesta:

En la actualidad, la mayor parte del equipo de I + D de la empresa adopta la separación de front-end y back-end para el desarrollo de proyectos, lo que puede mejorar en gran medida la eficiencia del desarrollo y mantenimiento del proyecto.

Por lo tanto, los desarrolladores de front-end generalmente requieren que los desarrolladores de back-end conviertan el valor de retorno de la interfaz en datos del tipo de datos json y lo envíen a los desarrolladores de front-end. Una vez que los desarrolladores de front-end obtienen los datos del tipo de datos json, lo procesarán por separado y lo obtendrán para ellos mismos.Los datos de campo deseados se utilizan para la carga de datos y la representación de la página html correspondiente.

Pregunta: ¿Cómo entender el tipo de datos de json?

Probablemente la respuesta:

El tipo de datos de json es en realidad una cadena.

El tipo de datos de json puede entenderse como dólares estadounidenses, y todos los países del mundo pueden comerciar en dólares estadounidenses.

Cualquier tipo de datos proporcionado por Python puede entenderse como RMB, cualquier tipo de datos proporcionado por Java puede entenderse como Euro, cualquier tipo de datos proporcionado por PHP puede entenderse como Yen japonés, y cualquier tipo de datos proporcionado por el lenguaje C puede entenderse como Hong Dólar de Kong., El tipo de datos requerido por html solo debe ser json.

Por lo tanto, independientemente del valor de retorno de la interfaz escrito en qué idioma de back-end, si el personal de front-end requiere que el tipo de datos del valor de retorno de la interfaz sea json, el personal de back-end debe convertir el tipo de datos del valor de retorno de la interfaz. , es decir, convertir el tipo de datos original (como python El tipo de datos de la lista de idiomas / tipo de datos dict) se puede convertir al tipo de datos json antes de que pueda considerarse como el valor de retorno de la interfaz final.

 

Dos, análisis simple del código fuente de la clase JsonResponse

detalle:

①.json es un formato de datos de uso común en la actualidad. A veces, nuestros desarrolladores de back-end necesitan devolver datos con formato json a los desarrolladores de front-end, y la clase JsonResponse puede satisfacer tales necesidades.

②. A través de [from django.http import JsonResponse] y [class JsonResponse (HttpResponse)], podemos saber que la clase JsonResponse es una subclase de HttpResponse y hereda la mayoría de los comportamientos de la clase padre para ayudar a crear respuestas json.

1. El código fuente de la clase JsonResponse es el siguiente

class JsonResponse(HttpResponse):

    """

    An HTTP response class that consumes data to be serialized to JSON.



    :param data: Data to be dumped into json. By default only ``dict`` objects

      are allowed to be passed due to a security flaw before EcmaScript 5. See

      the ``safe`` parameter for more information.

    :param encoder: Should be a json encoder class. Defaults to

      ``django.core.serializers.json.DjangoJSONEncoder``.

    :param safe: Controls if only ``dict`` objects may be serialized. Defaults

      to ``True``.

    :param json_dumps_params: A dictionary of kwargs passed to json.dumps().

    """



    def __init__(self, data, encoder=DjangoJSONEncoder, safe=True,

                 json_dumps_params=None, **kwargs):

        if safe and not isinstance(data, dict):

            raise TypeError(

                'In order to allow non-dict objects to be serialized set the '

                'safe parameter to False.'

            )

        if json_dumps_params is None:

            json_dumps_params = {}

        kwargs.setdefault('content_type', 'application/json')

        data = json.dumps(data, cls=encoder, **json_dumps_params)

        super().__init__(content=data, **kwargs)

2. El significado general y la función de cada parámetro en el constructor de la clase JsonResponse

Parámetro de entrada [datos]: se le debe pasar un valor de tipo de datos dict (tampoco puede pasarle un valor de tipo de datos dict), y se convertirá en datos en formato json.   

Parámetro de entrada [codificador]: el valor predeterminado es django.core.serializers.json.DjangoJSONEncoder o DjangoJSONEncoder, que se utiliza para serializar datos. (Para obtener más conocimientos sobre serialización, puede buscar serialización json en Baidu para aprender. En la actualidad, solo necesita saber cómo usarlo) ③. Entrada [segura]: El valor predeterminado es Verdadero. Si el valor se establece en False, significa que cualquier objeto (como lista / tupla / dict) se puede pasar para serialización; si el valor se establece en Verdadero y el valor de los datos del primer parámetro no es un objeto dict, un Se lanzará TypeError. 

④. Parámetros de entrada [json_dumps_params]: el valor predeterminado es Ninguno. Para el parámetro de entrada recién agregado en la versión django1.9, puede pasar un objeto procesado por el método json.dump () en la biblioteca json en python al parámetro de entrada como el valor del parámetro de entrada para generar una respuesta. (Entiendelo)

3. [Esquema 1: uso de serializadores] el proceso de realización del plan específico

1. El primer paso: primero escriba la función de visualización del contenido del código relevante

Código relacionado:


from django.core import serializers

import json

from django.http import JsonResponse





def search_person(request):

    # 第一种返回给前端页面的是json数据类型的方案:使用【serialize】

    data = {}

    a = Person.objects.all()

    b = serializers.serialize("json", a)

    print(type(b))

    print(b)

    print("================================分割线1===================================")

    c = json.load(b)

    print(type(c))

    print(c)

    print("================================分割线2===================================")

    data["result"] = c

    print(data["result"])

    print(data)

    print("================================分割线3===================================")

    d = JsonResponse(data, json_dumps_params={"ensure_ascii": False})



    print(type(d))

    print(d)

    print(d.content)

    return JsonResponse(data, json_dumps_params={"ensure_ascii": False})

2. Paso 2: visite el sitio web [ http://127.0.0.1:8000/search_person ] en cualquier navegador para ver la visualización de datos en la página de resultados

3. El tercer paso: puede obtener el valor de retorno de la interfaz en el sitio web [https://www.json.cn/] para su análisis y formateo, lo cual es conveniente para la inspección visual.

4. Paso 4 : Verifique la información del registro impreso para ver si cumple con el resultado esperado

4. [Esquema 2: Use model_to_dict] el proceso de realización del plan específico

1. El primer paso: primero escriba la función de visualización del contenido del código relevante


Código relacionado:

From django.forms import model_to_dict



def search_person(request):

    # 第二种返回给前端页面的是json数据类型的数据方案:【方案2:使用方法model_to_dict】

    res = Person.objects.all()

    json_list = []

    for i in res:

        json_dict = model_to_dict(i)

        json_list.append(json_dict)

    print(json_list)

    return JsonResponse(json_list, safe=False, json_dumps_params={"ensure_ascii": False})

2. Paso 2: visite el sitio web [ http://127.0.0.1:8000/search_person ] en cualquier navegador para ver la visualización de datos en la página de resultados

3. Paso 3 : Verifique la información del registro impreso para ver si cumple con el resultado esperado

5. [Esquema 3: usar el valor del método combinado con la lista de métodos] el proceso de realización del plan específico

1. El primer paso: primero escriba la función de visualización del contenido del código relevante


Código relacionado:

def search_person(request):

    # 第三种返回给前端页面的是json数据类型的数据方案:【方案3:使用方法value()跟方法list结合】

    res = Person.objects.all().values()

    print(type(res))

    print(res)

    print("================================分割线1===================================")

    res = list(res)

    print(type(res))

    data = {"result": res}

    print(data)

    print("================================分割线2===================================")

    return JsonResponse(data, json_dumps_params={"ensure_ascii": False})

2. Paso 2: visite el sitio web [ http://127.0.0.1:8000/search_person ] en cualquier navegador para ver la visualización de datos en la página de resultados

3. Paso 3 : Verifique la información del registro impreso para ver si cumple con el resultado esperado

detalle:

①. [Esquema 3: Usar valor del método () combinado con la lista de métodos] es la solución principal y comúnmente utilizada, y podemos elegir esta solución 3 en la medida de lo posible cuando desarrollemos la plataforma.

Supongo que te gusta

Origin blog.csdn.net/LYX_WIN/article/details/114405004
Recomendado
Clasificación