validate framework example error create codes django ember.js ember-data django-rest-framework json-api

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:

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