Возможность повторного использования кода между django и django rest framework
Мне поручили проект, который имеет две версии: старая написана на django, а новая - на django rest framework.
Я совсем новичок в django и drf. Просматривая обе кодовые базы, я наткнулся на следующий код в одной из views.py
в новой версии drf:
def get_xyz(request):
# some business logic
return HttpResponse(json.dumps({ ... })
, content_type="application/json"
, status=status.HTTP_200_OK)
Затем в старой версии приложения я обнаружил функцию с точно такой же структурой в файле views.py. Это привело меня в замешательство:
Можно ли использовать представления на основе функций (как описано выше), написанные в (не-drf) приложении django, так же, как и в приложении на основе drf?
Можем ли мы использовать представления на основе классов (как показано ниже) из приложения django без drf, как в приложении на основе drf?
class AbcClass(View): def get(self, request): # business logic return HttpResponse(json.dumps({ ... }) , content_type="application/json" , status=status.HTTP_200_OK) def post(self, request): # business logic return HttpResponse("success", status.HTTP_200_OK)
Все ли классы фреймворка django (не рест) (как
View
выше) прекрасно работают в drf?Можно ли сделать так, чтобы фронтенд приложение, написанное на react (или angular), посылало запросы и получало ответы от старого django приложения (аналогично тому, как фронтенд приложения, построенные на этих UI фреймворках, обычно взаимодействуют с API, построенными на drf)?
Да, DRF расширяет фреймворк django, предоставляя generics view и инструментарий для них (маршрутизация, модели, сериализатор и т.д.). Но в конечном итоге, все, что он делает, это привязывает функцию (метод представлений, основанных на классах) к определенному маршруту/запросу. Django admin будет по-прежнему работать без DRF, и любого дополнительного приложения, которое вы уже определили (и обычно вы привязываете эти приложения к api маршруту с помощью файла url.py).
Для создания SPA с django, это полностью выполнимо, пока вы возвращаете любой тип данных, который может потреблять ваш клиент (обычно application/json mime type). DRF - это "всего лишь" обертка вокруг django для этого (с хорошей архитектурой, модульными и развязанными функциями), но возвращать json в django так же просто, как возвращать объект JsonResponse из вашей функции представления (https://docs.djangoproject.com/fr/4.1/ref/request-response/).