Sono un principiante nel framework Rango di Django e ho bisogno del vostro consiglio. Sto sviluppando un servizio web. Il servizio deve fornire un'interfaccia REST ad altri servizi. L'interfaccia REST, che devo implementare, non funziona direttamente con i miei modelli (intendo le operazioni get, put, post, delete). Invece, fornisce altri servizi con alcuni risultati di calcolo. Su richiesta il mio servizio esegue alcuni calcoli e restituisce solo i risultati (non memorizza i risultati nel proprio database).Framework Rango di Django: serializzatore non modello
Di seguito è la mia comprensione di come l'interfaccia REST potrebbe essere implementata. Correggimi, se sbaglio.
- Creare la classe che esegue i calcoli. Chiamalo 'CalcClass'. CalcClass utilizza i modelli nel suo lavoro.
- Params necessari per i calcoli vengono passati al costruttore.
- Implementare l'operazione di calcolo. Restituisce risultati come 'ResultClass'.
- Crea ResultClass.
- Derivato dall'oggetto.
- Ha solo attributi contenenti i risultati del calc.
- Una parte dei risultati del calc è rappresentata come una tupla di tuple. Come ho capito, sarebbe meglio per un'ulteriore serializzazione implementare una classe separata per quei risultati e aggiungere l'elenco di tali oggetti a ResultClass.
- Creare Serializer per ResultClass.
- Deriva da serializers.Serializer.
- I risultati del calc sono di sola lettura, quindi utilizzare principalmente la classe Field per i campi, anziché le classi specializzate, come IntegerField.
- Non dovrei eseguire il metodo impl save() né su ResultClass, né su Serializer, perché non ho intenzione di memorizzare i risultati (voglio solo restituirli su richiesta).
- Serializzatore Impl per risultati annidati (ricordate la tupla di tuple menzionate sopra).
- CREATE VIEW per restituire i risultati di calcolo.
- Deriva da APIView.
- Serve solo ottenere().
- In get() creare CalcClass con params recuperati dalla richiesta, chiamare il suo calc(), ottenere ResultClass, creare Serializer e passare il ResultClass ad esso, tornare Response (serializer.data).
- URL
- Non c'è radice api nel mio caso. Dovrei solo avere URL per ottenere vari risultati di calc (calc con parametri diff).
- Aggiungere il formato format_suffix_patterns per la navigazione api.
Mi sono perso qualcosa? L'approccio è corretto in generale?
Ciao Gabriel! La ringrazio per la risposta! Ho già implementato ciò di cui ho bisogno secondo il mio piano. Funziona bene! Ho usato il serializzatore per una migliore uscita JSON. – Zakhar
Grazie mille, mi ha salvato la giornata. Dovrebbe essere parte della documentazione. – neelix
Ho provato a seguire questo suggerimento ma ottengo: "Non posso applicare DjangoModelPermissions su una vista che non ha proprietà' .model' o '.queryset'.". Ho provato l'esatto esempio fornito. Potrebbe essere qualcosa con la versione recente di django-rest-framework? – Orlando