Django REST API: Как ответить на POST запрос?
Я хочу отправить POST запрос с помощью axios(VueJS) и когда Django сервер получил POST запрос, я хочу получить обратно сообщение запроса. Я пробовал делать функции, когда получаю POST запрос на Django сервере и затем возвращаю JsonResponse({"response": "got post request"), safe=False)
JS-функция
sendMessage() {
axios({
method: "POST",
url: url,
data: this.message
})
.then(response => {
this.receive = response;
})
.catch(response => {
alert('Failed to POST.' + response);
})
}
}
views.py
from chat.serializer import chatSerializer
from chat.models import *
from rest_framework.routers import DefaultRouter
from rest_framework import viewsets
from django.http import JsonResponse
from django.views.generic import View
# Create your views here.
class get_post(View):
def post(self, request):
if request.method == 'POST':
JsonResponse({"response": 'got post request'}, safe=False)
но ошибка говорит так в django
Internal Server Error: /api/chat/
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/django/core/handlers/exception.py", line
47, in inner
response = get_response(request)
File "/usr/lib/python3/dist-packages/django/core/handlers/base.py", line 188,
in _get_response
self.check_response(response, callback)
File "/usr/lib/python3/dist-packages/django/core/handlers/base.py", line 309,
in check_response
raise ValueError(
ValueError: The view chat.views.views.get_post didn't return an HttpResponse object. It returned None instead.
[26/Oct/2022 17:06:51] "POST /api/chat/ HTTP/1.1" 500 60946
Я думаю, что POST запрос работает правильно, но в коде Django что-то не так.
Итак, мой вопрос таков...
- Как исправить и решить эту ошибку?
- Когда я вызываю axios в JS, внутри '.then' мы получаем ответ, так какие данные приходят в эту переменную? Должен ли я вернуть эти данные методом Response() или JsonResponse()?
просто добавьте возврат в представлении... вот так:
class get_post(View):
def post(self, request):
if request.method == 'POST':
return JsonResponse({"response": 'got post request'}, safe=False)
потому что ошибка жалуется, что функция post должна возвращать что угодно.
для второго вопроса вам нужно вернуть JsonResponse, потому что вы имеете дело с API.