serialize framework example ejemplo array apiview python django rest post django-rest-framework

python - framework - Acceso a los datos del campo POST sin formulario(API REST) utilizando Django



django rest framework response (3)

De los docs :

request.data devuelve el contenido analizado del cuerpo de la solicitud. Esto es similar a los atributos estándar request.POST y request.FILES excepto que:

  • Incluye todo el contenido analizado, incluidas las entradas de archivos y no de archivos.
  • Admite el análisis del contenido de métodos HTTP distintos de POST , lo que significa que puede acceder al contenido de PUT y PATCH
    peticiones.
  • Admite el análisis flexible de solicitudes del marco REST, en lugar de solo admitir datos de formularios. Por ejemplo, puede manejar los datos JSON entrantes de la misma manera que maneja los datos de formularios entrantes.

¿Puedo simplemente leer los datos usando response.POST["field1"] , o tendré que hacer algo con request.body ?

Así que simplemente puedo usar request.body como un objeto similar a un diccionario similar a request.POST ?

Un ejemplo - Desde un método de create (conjuntos de vistas):

user = dict( full_name=request.DATA[''full_name''], password=request.DATA[''password''], email=request.DATA[''email''], personal_number=request.DATA[''personal_number''], user_type=request.DATA[''user_type''], profile_id=request.DATA[''profile_id''], account_id=request.DATA[''account_id''] )

Edición 1 : en la versión 3 (más reciente) - request.DATA se ha reemplazado con request.data :

user = dict( full_name=request.data[''full_name''], password=request.data[''password''], email=request.data[''email''], personal_number=request.data[''personal_number''], user_type=request.data[''user_type''], profile_id=request.data[''profile_id''], account_id=request.data[''account_id''] )

En la documentación de django , dice:

HttpRequest.POST

Un objeto similar a un diccionario que contiene todos los parámetros POST HTTP dados, siempre que la solicitud contenga datos de formulario. Consulte la documentación de QueryDict a continuación. Si necesita acceder a los datos sin formato o sin formato publicados en la solicitud, acceda a este a través del atributo HttpRequest.body.

Sin embargo, el servidor no responde a un navegador (como usar JS frameworks o un formulario), sino a una API REST enviada por una aplicación Anroid / iOS.

Si el cliente envía campos directamente en una solicitud POST, ¿cómo puedo leer los datos? Por ejemplo, esto (Java + Unirest):

Unirest.post("/path/to/server") .field("field1", "value2") .field("field2", "value2");

EDITAR: ¿Puedo simplemente leer los datos usando response.POST["field1"] , o tendré que hacer algo con request.body ?

EDIT 2: ¿Así que simplemente puedo usar request.body como un objeto similar a un diccionario similar a request.POST ?


Según tengo entendido, el método de campo de Unirest solo utiliza datos de application/x-www-form-urlencoded como un formulario HTML. Por lo tanto, deberías poder usar simplemente response.POST["field1"] como sugeriste.


Si la API con la que está interactuando es una vista basada en la clase Django de Sipmle, puede acceder a los datos a través de la request.body Algo así:

class MyView(View): def post(self, request): field1 = request.body.get(''field1'') field2 = request.body.get(''field2'') ... # processing here

En caso de que esté utilizando la API de Django Rest Framework, acceda a los datos a través de request.data :

field1 = request.data.get(''field1'') field2 = request.data.get(''field2'')

NB: si encuentra request.DATA utilizado en algún lugar de Internet también es correcto, pero solo es válido para versiones antiguas de DRF y está en desuso en lugar de request.data en las versiones más nuevas.