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ándarrequest.POST
yrequest.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 dePUT
yPATCH
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 conrequest.body
?Así que simplemente puedo usar
request.body
como un objeto similar a un diccionario similar arequest.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.