Django & POST от Ajax - PullRequest
       13

Django & POST от Ajax

0 голосов
/ 13 ноября 2018

Я пытался получить POST для моих представлений Django с конечной целью отправить «выбранный» вход (из щелчка #id) и заставить Django отправить ответ, который я могу динамически показать. Используя GET, я могу получить ответ, но POST вызывает у меня проблемы (я мог бы пойти на GET, но сейчас я просто хочу понять, почему я портю POST ...;))

Я уже использовал несколько руководств, но большинство из них касаются форм, и, если честно, у меня возникают проблемы с соблюдением документации (у меня практически нет опыта в программировании).

Может ли кто-нибудь указать мне правильное направление?

Мой HTML (на данный момент 'numberinput' является заполнителем):

<script>
    $("#test").on(click(function () {
        numberinput = 8;

        $.ajax({
            type: 'POST',
            url: '{% url "rungenerator" %}',
            data: {'numberinput': numberinput},
            dataType: 'json',
            success: function (inputtype) {
                alert(inputtype)

            }

        })
    }))

</script>

<div>
    <form method="POST">
        {% csrf_token %}
        <button type="submit" id="test">Buzzzz Ping</button>

    </form>
</div>

Просмотров: 1010 * *

def rungenerator(request):
    inputtype = "Please make a selection"

    if request.method == 'POST':
        inputtype = request.POST['numberinput',None]
    return JsonResponse(inputtype)

URLS:

url(r'^ajax/rungenerator/$', views.rungenerator, name='rungenerator'),

1 Ответ

0 голосов
/ 13 ноября 2018

@ csrf_exempt Позволит вам обойти проверку токена. Проверьте, не совершил ли ваш вызов Ajax перекрестную исходную ошибку. в этом случае вы должны использовать cors-headers в вашем приложении django. Кстати, использование require_http_methods заставит функцию проверять метод HTTP, поэтому вы можете быть на 100% уверены, что все данные, которые вы получите, будут POST

from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_http_methods
from django.http import HttpResponse

@csrf_exempt
@require_http_methods(["POST"])
def rungenerator(request):
    inputtype = request.POST.get('numberinput', None)
    payload = {"response":str(inputtype)} if inputtype is not None else {"response":"please type something"}
    return HttpResponse(json.dumps(payload, indent=2),
                            content_type='application/json',
                            status=200) 
...