Как обрабатывать Ajax Data в Python (Django) - PullRequest
0 голосов
/ 03 мая 2019

Я хочу отправить данные переднего плана (входные данные формы) на сервер через Ajax. Для этого я создал почтовый запрос Ajax, но я очень неустойчивый ... При первых попытках я постоянно получаю сообщения об ошибках python

Ajax call:

//Get journey time for the stated address
    jQuery.ajax({
        type: 'post',
        url: 'http://127.0.0.1:8000/termin/get-journey-time/',
        data: {
            'method': 'get_journey_time',
            'mandant_id': 1,
            'customer_address': customer_address,
            'staff_group': staff_group_id
        },
        error: function (jqXHR, textStatus, errorThrown) {
            console.log("Error")
        },
        timeout: 120000,
    });

Я создал представление в Python, в котором я хочу что-то сделать (views.py)

class get_journey_time(generics.ListAPIView):
    """
    Handle Ajax Post to calculate the journey time to customer for the selected staff group
    """
    permission_classes = (AllowAny,)

    def post(self, request, *args, **kwargs):
        print(request)

В моем файле маршрута URL есть строки этого кода (urls.py)

urlpatterns = [
    XXXXXXXXXXXXXXXXXXXXXXXXX,
    path('termin/get-journey-time/', views.get_journey_time.as_view()),
    XXXXXXXXXXXXXXXXXXXXXXXXX,
    XXXXXXXXXXXXXXXXXXXXXXXXX,
]

Я получил код ошибки 500:

Expected a `Response`, `HttpResponse` or `HttpStreamingResponse` to be returned from the view, but received a `<class 'NoneType'>`

Есть ли ошибка в моем подходе, я что-то пропустил или это совсем дерьмо?

Ответы [ 2 ]

0 голосов
/ 03 мая 2019

вы можете сделать это следующим образом

from rest_framework.response import Response
from rest_framework.views import APIView


class get_journey_time(APIView):
    # ListAPIView is used for read-only endpoints
    #
    """
    Handle Ajax Post to calculate the journey time to customer for the selected staff group
    """
    permission_classes = (AllowAny,)

    def post(self, request, *args, **kwargs):
        # you can get the posted data by request.data
        posted_data = request.data
        data = {"test": "test"}
        return Response(data)

вы можете получить опубликованные данные и использовать сериализаторы.Вы можете начать обучение игре с сериализаторами здесь

Пример кода сериализатора может быть таким:

from rest_framework import serializers


class DummySerializer(serializers.Serializer):
    name = serializers.CharField()
    mobile_number = serializers.CharField(required=False)

, а затем использовать его в методе post вашего get_journey_time класса

0 голосов
/ 03 мая 2019

Определить классы визуализации и классы синтаксического анализатора в settings.py .

Примечание: ВыМожно определить многие из них (основываясь на требованиях и потребностях), но здесь нам нужен только JSON.

В качестве справки вы можете проверить этот файл моего репозитория https://github.com/hygull/p-host/blob/master/src/pmt_hostel_app/views.py. Я использовал представления на основе функций, просто игнорируйте код внутри него и сосредоточьтесь на request.data , а такжепроверьте связанные файлы HTML.

REST_FRAMEWORK = {
    'DEFAULT_PARSER_CLASSES': (
        'rest_framework.parsers.JSONParser',
    ), 
    'DEFAULT_RENDERER_CLASSES': (
        'rest_framework.renderers.JSONRenderer', 
   )
}

Таким образом, вы сможете получить доступ к опубликованным данным в виде словаря, который можно получить, используя request.data в представлениях.

Наконец, верните Response из метода post ().По умолчанию возвращаемый тип функции / метода равен Нет , и вы просто печатаете запрос .

Проверьте указанные ниже ссылки, это вам очень поможет.

В коде клиента, я имею в виду в коде JavaScript, определите success callbackтакже (вы только что определили ошибка обратный вызов).

Пожалуйста, прокомментируйте, если вы застряли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...