Jestem początkujący w ramach Django REST i potrzebuję twojej porady. Zajmuję się tworzeniem usługi internetowej. Usługa musi zapewniać interfejs REST dla innych usług. Interfejs REST, który muszę wdrożyć, nie działa bezpośrednio z moimi modelami (mam na myśli operacje get, put, post, delete). Zamiast tego zapewnia inne usługi z pewnymi wynikami obliczeń. Na żądanie moja usługa wykonuje pewne obliczenia i po prostu zwraca wyniki (nie zapisuje wyników we własnej bazie danych).Django REST framework: niemodalny serializator
Poniżej znajduje się moje zrozumienie, w jaki sposób można wdrożyć interfejs REST. Popraw mnie, jeśli się mylę.
- Utwórz klasę, która dokonuje obliczeń. Nazwij go "CalcClass". CalcClass używa modeli w swojej pracy.
- Parametry niezbędne do obliczeń są przekazywane do konstruktora.
- Wykonaj operację Calc. Zwraca wyniki jako "ResultClass".
- Utwórz ResultClass.
- Pochodzi od obiektu.
- Ma tylko atrybuty zawierające wyniki obliczeń.
- Jedna część wyników obliczeń jest reprezentowana jako krotka krotek. Jak rozumiem, byłoby lepiej dla dalszej serializacji wdrożyć oddzielną klasę dla tych wyników i dodać listę takich obiektów do ResultClass.
- Utwórz serializator dla ResultClass.
- Wyprowadzić z serializera.Serializator.
- Wyniki calc są tylko do odczytu, więc zamiast klas specjalistycznych, takich jak IntegerField, należy używać głównie pól Field.
- Nie powinienem impl ani metody save() ani na ResultClass, ani na Serializer, ponieważ nie zamierzam przechowywać wyników (chcę tylko zwrócić je na żądanie).
- Serializator Impl dla wyników zagnieżdżonych (pamiętaj o krotce krotek wymienionych powyżej).
- Utwórz widok, aby wyświetlić wyniki obliczeń.
- Wyprowadzić z APIView.
- Potrzebujesz tylko get().
- W get() utwórz CalcClass z paramami pobranymi z żądania, wywołaj jego calc(), pobierz ResultClass, utwórz Serializer i przekaż do niego ResultClass, zwróć Response (serializer.data).
- URL
- Nie ma korzeń api w moim przypadku. Powinienem mieć adresy URL, aby uzyskać różne wyniki obliczeń (kalc z parametrami diff).
- Dodawanie wywołania format_suffix_patterns do przeglądania api.
Czy coś mi umknęło? Czy podejście jest w ogóle poprawne?
Cześć Gabriel! Dziękuję za Twoją odpowiedź! Już wdrożyłem to, czego potrzebuję zgodnie z moim planem. Działa w porządku! Użyłem serializera dla lepszego wyjścia JSON. – Zakhar
Wielkie dzięki, to uratowało mój dzień. Powinien być częścią dokumentacji. – neelix
Próbowałem postępować zgodnie z tą sugestią, ale otrzymuję: "Nie można zastosować DjangoModelPermissions w widoku, który nie ma własności' .model' lub '.queryset'.". Próbowałem dokładnie podanego przykładu. Czy może to być coś z najnowszą wersją django-rest-framework? – Orlando