#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 };
}