django - framework - Mostrar errores de conformidad JSON Api
django rest framework request (2)
Creo que sé lo que está sucediendo (como también me pasó a mí).
Cambie el código de error HTTP de 400 a 422 (entidad no procesable) y verifique si soluciona el problema.
Además, al ver el código fuente del JSONAPIAdapter (que se extiende desde el RestAdapter) creo que estoy en lo cierto.
isInvalid: function(status, headers, payload) {
return status === 422;
},
Esto se puede cambiar a ( adapters/application.js
):
import DS from ''ember-data'';
import config from ''../config/environment'';
export default DS.JSONAPIAdapter.extend(DataAdapterMixin, {
host: config.API_HOST,
namespace: config.API_NAMESPACE,
isInvalid: function(status, headers, payload) {
return status === 400 || status === 422;
},
});
Recibo errores de JSON Api conform del back-end:
{
"errors": [
{
"status": "400",
"source": {
"pointer": "/data/attributes/description"
},
"detail": "This field may not be null."
},
{
"status": "400",
"source": {
"pointer": "/data/attributes/due-date"
},
"detail": "This field may not be null."
},
{
"status": "400",
"source": {
"pointer": "/data/attributes/extra-comments"
},
"detail": "This field may not be null."
},
{
"status": "400",
"source": {
"pointer": "/data/attributes/name"
},
"detail": "This field may not be null."
},
{
"status": "400",
"source": {
"pointer": "/data/attributes/payment-type"
},
"detail": "This field may not be null."
},
{
"status": "400",
"source": {
"pointer": "/data/attributes/price"
},
"detail": "This field may not be null."
}
]
}
Intento mostrarlos en mi plantilla, como se describe en la documentación de EmberData :
{{#each model.errors.messages as |message|}}
<div class="error">
{{message}}
</div>
{{/each}}
Nada se muestra. Diría que los .errors
en el modelo no están .errors
, pero no estoy seguro de cómo verificar esto. Cómo puedo:
- mostrar la respuesta ajax recibida?
- asegúrese de que EmberData esté procesando la respuesta y
model.errors
? - ¿Muestra los
model.errors
procesados en la consola? - Mostrar el
model
y todas las propiedades?
En general, estoy experimentando que las nuevas versiones de Ember son muy difíciles de depurar. Cada vez que muestro un objeto Ember en la consola, solo veo algunas propiedades Computed
que no se expanden cada vez que intento echarles un vistazo.
Mi backend es:
- Django 1.9
- con django-resto-marco
- django-rest-framework-json-api
EDITAR
Estos son los datos que estoy enviando al backend (JSONAPi conform):
{
"data": {
"attributes": {
"name": null,
"description": null,
"extra-comments": null,
"min-price": 30,
"max-price": 3000,
"price-step": 10,
"price": null,
"payment-type": null,
"due-date": null
},
"relationships": {
"seller": {
"data": null
},
"artist": {
"data": null
},
"subcategory": {
"data": null
}
},
"type": "projects"
}
}
El backend está bien con esto, detecta los errores y proporciona una respuesta de errors
conforme JSON APi, como se especifica más arriba.
Como referencia, he hecho esto en el lado django:
from rest_framework_json_api.exceptions import exception_handler
def custom_exception_handler(exc, context):
# DRF returns 400, but EmberData wants 422. I will force a 422, always.
# Call the rest_framework_json_api''s exception handler first,
# to get the standard error response.
response = exception_handler(exc, context)
# TODO: is this correct? 422 in all exception cases?!
response.status_code = 422
return response