Как я могу получить Javascript переменных объекта ответа onSuccess в Python? - PullRequest
0 голосов
/ 29 января 2020

Справочная информация:

Работая в приложении Django, у меня есть шаблон, который выполняет действие (производит платеж) с использованием внешнего API. Вызов API выполняется в Javascript.

В случае успеха API возвращает объект response. Это хорошо работает на тестах.

function makePayment(applicationAmount) {
    let paymentEngine = RmPaymentEngine.init({
        key: 'abcd'
        firstName: '{{ user.f_name }}',
        onSuccess: function(response) {
            console.log('callback Successful Response', response);
            // TODO: Add a function to post the payment records to the database
            // response from the API contains a dictionary like (read json) object
            // how can I get that response object in Python and use those response
            // object values to update a django model database records
        },
        onError: function(response) {
            console.log('callback Error Response', response);
            // TODO: Add a function to throw an error message
        },
        onClose: function() {
            console.log("closed");
        }
    });
}

Вопрос:

Как я могу получить onSuccess response объектных переменных в Python и использовать эти response значения объекта для обновления записей базы данных модели django?

Посмотрел эту ссылку: Как я могу вернуть ответ от асинхронного вызова? , но могу Кажется, я не понимаю, что мне нужно.

Я был бы рад обратиться к простому ресурсу, объясняющему процедуру, а не к чему-то очень сложному, для понимания которого требуются часы.

1 Ответ

0 голосов
/ 06 февраля 2020

Используя идеи из @ Lag11 и @Arount и замечательный учебник здесь , я создал 2 представления на основе функций, один для обслуживания «страницы», другой для обработки «пост страницы в БД».

Резюме, я сделал это в шаблоне :

function makePayment(applicationAmount) {
    let paymentEngine = RmPaymentEngine.init({
        key: 'abcd'
        firstName: '{{ user.f_name }}',
        onSuccess: function(response) {
            console.log('callback Successful Response', response);

            // start new additions

            data = {
                "payer_email": "{{ user.email }}",
                "payer_phone": "{{ user.phone }}",
                "payment_amount_total": response.amount,
            }

            $.ajax({
                type: 'POST',
                url: "{% url 'post_purchase_form' %}",
                data: data,
                onSuccess: function (response) {
                    console.log('callback db post Successful', response);  
                },
                error: function (response) {
                    // alert the error if any error occured
                    alert(response);
                }
            })
            // end new additions
        },
        onError: function(response) {
            console.log('callback Error Response', response);
            // TODO: Add a function to throw an error message
        },
        onClose: function() {
            console.log("closed");
        }
    });
}

И это в views.py :

def application_form_view(request):
    user = request.user
    form = ApplicationForm(instance=user)

    return render(request, 'application_form.html', {'form': form, 'user': user})

def post_application_form_view(request):
    # request should be ajax and method should be POST.
    if request.is_ajax and request.method == "POST":
        # get the form data
        form = ApplicationForm(request.POST, request.FILES)
        # save the data and after fetch the object in instance
        if form.is_valid():
            instance = form.save()
            # serialize in new FormPurchase object in json
            ser_instance = serializers.serialize('json', [ instance, ])
            # send to client side.
            return JsonResponse({"instance": ser_instance}, status=200)
        else:
            # some form errors occured.
            return JsonResponse({"error": form.errors}, status=400)

    # some error occured
    return JsonResponse({"error": "unknown errors"}, status=400)
...