Отправка запросов Django в NextJS с данными

#django #request #next.js #x-www-form-urlencoded

#django #запрос #next.js #x-www-form-urlencoded

Вопрос:

Я рассматриваю возможность интеграции NextJS в существующий проект Django. Проект интенсивно использует шаблоны Django для большинства своих страниц, и я рассматриваю возможность модернизации проекта, используя преимущества React и создавая систему проектирования / компонентов. Идея в том, что в конечном итоге мы рассмотрим замену Django на NextJS.

Я смог использовать Django для передачи запроса через прокси в NextJS, и он отлично работает! Я также смог отправлять данные непосредственно на маршрут NextJS, чтобы мне не приходилось перезванивать в Django для получения данных. Этот подход, к сожалению, имеет ограничение только на отправку данных ключа / значения.

Вот рабочий код.

 # django
def get(self, request, *args, **kwargs):
  data = request.GET
  return self._handle_request(data, requests.post)

def _handle_request(self, data, make_request):
  data = {"hello": "world"}
  response = make_request("http://localhost:3000", data=data)
  return HttpResponse(response)
 
 //nextjs 
import parse from "urlencoded-body-parser";

export async function getServerSideProps(context) {
  const { req } = context;
  const props = await parse(req);
  return { props };
};
 

Итак, имея это в виду, есть ли лучший способ добиться отправки данных на маршрут NextJS без необходимости обратного вызова?

Ответ №1:

После некоторых исследований я смог добиться этого, используя application/json content type.

 class NextJsView(WhiteLabelMixin, View):
    def get(self, request, *args, **kwargs):
        data = request.GET
        return self._handle_request(data, requests.post)

    def _handle_request(self, data, make_request):
        data = {"hello": {"dark": "world"}}
        response = make_request("http://localhost:3000", json=json.dumps(data))
        return HttpResponse(response)
 
 import getRawBody from "raw-body";

export async function getServerSideProps(context) {
  const { req } = context;
  let props = {};
  if (req.method == "POST") {
    const body = await getRawBody(req);
    props = JSON.parse(JSON.parse(body));
  }
  return { props };
}