Возможность повторного использования кода между 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. Это привело меня в замешательство:

  1. Можно ли использовать представления на основе функций (как описано выше), написанные в (не-drf) приложении django, так же, как и в приложении на основе drf?

  2. Можем ли мы использовать представления на основе классов (как показано ниже) из приложения 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)
    
  3. Все ли классы фреймворка django (не рест) (как View выше) прекрасно работают в drf?

  4. Можно ли сделать так, чтобы фронтенд приложение, написанное на 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/).

Вернуться на верх