Soy principiante en Django REST framework y necesito tu consejo. Estoy desarrollando un servicio web. El servicio tiene que proporcionar una interfaz REST a otros servicios. La interfaz REST, que necesito implementar, no funciona con mis modelos directamente (me refiero a las operaciones get, put, post, delete). En cambio, proporciona otros servicios con algunos resultados de cálculo. En una solicitud, mi servicio hace algunos cálculos y solo devuelve los resultados (no almacena los resultados en su propia base de datos).
A continuación, entiendo cómo se podría implementar esa interfaz REST. Corrígeme si estoy equivocado.
- Crear clase que hace los cálculos. Nómbrelo 'CalcClass'. CalcClass utiliza los modelos en su trabajo.
- Los parámetros necesarios para los cálculos se pasan al constructor.
- Implementar la operación calc. Devuelve resultados como 'ResultClass'.
- Crear ResultClass.
- Derivado del objeto.
- Solo tiene atributos que contienen los resultados de cálculo.
- Una parte de los resultados del cálculo se representa como una tupla de tuplas. Según tengo entendido, sería mejor para una mayor serialización implementar una clase separada para esos resultados y agregar una lista de dichos objetos a ResultClass.
- Crear serializador para ResultClass.
- Derivar de serializadores. Serializador.
- Los resultados de cálculo son de solo lectura, por lo tanto, use principalmente la clase Field para campos, en lugar de clases especializadas, como IntegerField.
- No debería implicar el método save () ni en ResultClass ni en Serializer, porque no voy a almacenar los resultados (solo quiero devolverlos a pedido).
- Impl serializador para resultados anidados (recuerde la tupla de tuplas mencionadas anteriormente).
- Crear vista para devolver los resultados del cálculo.
- Derivar de APIView.
- Solo necesita obtener ().
- En get () cree CalcClass con los parámetros recuperados de la solicitud, llame a su calc (), obtenga ResultClass, cree Serializer y pásele el ResultClass, devuelva Response (serializer.data).
- URLs
- No hay raíz api en mi caso. Debería tener URL para obtener varios resultados de cálculo (cálculo con parámetros de diferencia).
- Agregue el formato format_suffix_patterns para la exploración de la API.
¿Me he perdido algo? ¿El enfoque es correcto en general?
django
rest
django-rest-framework
Zakhar
fuente
fuente
Respuestas:
Django-rest-framework funciona bien incluso sin vincularlo a un modelo. Su enfoque suena bien, pero creo que puede recortar algunos de los pasos para que todo funcione.
Por ejemplo, rest framework viene con algunos renderizadores integrados. Fuera de la caja, puede devolver JSON y XML al consumidor de API. También puede habilitar YAML simplemente instalando el módulo python requerido. Django-rest-framework generará cualquier objeto básico como dict, list y tuple sin ningún trabajo adicional de su parte.
Básicamente, solo tiene que crear la función o clase que toma argumentos, realiza todos los cálculos necesarios y devuelve sus resultados en una tupla a la vista de la API REST. Si JSON y / o XML se ajustan a sus necesidades, django-rest-framework se encargará de la serialización por usted.
Puede omitir los pasos 2 y 3 en este caso, y solo usar una clase para los cálculos y otra para la presentación al consumidor de API.
Aquí hay algunos fragmentos que pueden ayudarte:
Tenga en cuenta que no he probado esto. Solo significa un ejemplo, pero debería funcionar :)
La clase Calc:
La vista REST:
Tu urls.py:
Este código debería generar una lista de listas cuando accede a http://example.com/api/v1.0/resource/?format=json . Si usa un sufijo, puede sustituirlo
?format=json
por.json
. También puede especificar la codificación que desea recuperar agregando"Content-type"
o"Accept"
a los encabezados.Espero que esto te ayude.
fuente
.model
o.queryset
propiedad". He intentado el ejemplo exacto proporcionado. ¿Podría ser algo con la versión reciente de django-rest-framework?En urls.py, la función login_required requiere
fuente
add a comment
sesión