tutorial template tag languages dateformat custom json django post django-views httprequest

template - Django solicitud Publicar json



inclusion tags django (3)

Como HttpRequest tiene un método read (), cargar JSON desde la solicitud es realmente tan simple como:

def post(self, request, *args, **kwargs): import json data = json.load(request) return JsonResponse(data=data)

Si pones esto como una vista, puedes probarlo y se hará eco de cualquier JSON que te enviemos.

Intento probar una vista, recibo una solicitud json desde el iPad, el formato es:

req = {"custom_decks": [ { "deck_name": "deck_test", "updates_last_applied": "1406217357", "created_date": 1406217380, "slide_section_ids": [ 1 ], "deck_id": 1 } ], "custom_decks_to_delete": [] }

Revisé esto en jsonlint y pasó.

Publiqué la solicitud a través de:

response = self.client.post(''/library/api/6.0/user/''+ uuid + ''/store_custom_dec/'',content_type=''application/json'', data=req)

La vista devuelve "creation_success": falso

El problema es que el método de publicación a la vista no encuentra la clave custom_decks.

QueryDict: {u''{"custom_decks": [{"deck_id": 1, "slide_section_ids": [1], "created_date":1406217380, "deck_name": "deck_test"}], "custom_decks_to_delete": []}'': [u'''']}>

El problema es que el método de publicación a la vista no encuentra la clave custom_decks. Porque está convirtiendo mi dict a QueryDict con una clave.

Agradezco todas las ayudas.

Gracias


Como estaba teniendo problemas para obtener datos JSON de HttpRequest directamente con el código de la otra respuesta:

data = json.loads(request.body) custom_decks = data[''custom_decks'']

error:

the JSON object must be str, not ''bytes''

Aquí hay una actualización de la otra respuesta para Python versión> 3:

json_str=((request.body).decode(''utf-8'')) json_obj=json.loads(json_str)

En cuanto a la decodificación (''utf-8''), como se menciona en:

RFC 4627:

"El texto JSON se codificará en Unicode. La codificación predeterminada es UTF-8".

Adjunté el enlace de Python referido a este problema específico para la versión> 3.

http://bugs.python.org/issue10976


Está publicando JSON, que no es lo mismo que datos codificados en forma. Necesita obtener el valor de request.body y deserializarlo:

data = json.loads(request.body) custom_decks = data[''custom_decks'']