Как я могу решить эту ошибку 403 python, django, ajax, javascript? - PullRequest
0 голосов
/ 05 ноября 2018

Я пытаюсь использовать запрос ajax с моей формой Django. У меня не было этой проблемы, прежде чем пытаться реализовать AJAX. Я думаю, что в моей Java есть какая-то ошибка, но я не уверен. Я прошел все уроки и прочитал каждый документ, который смог найти. Я не могу решить эту проблему.

Js и HTML

{% extends "app/layout.html" %}
{% load crispy_forms_tags %}
{% block javascript %}
    <script>
        // using jQuery
        function getCookie(name) {
            var cookieValue = null;
            if (document.cookie && document.cookie !== '')
        {
                var cookies = document.cookie.split(';');
                for (var i = 0; i < cookies.length; i++) {
                    var cookie = jQuery.trim(cookies[i]);
                    // Does this cookie string begin with the name we want?
                    if (cookie.substring(0, name.length + 1) === (name + '=')) {
                        cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                        break;
                    }
                }
            }
            return cookieValue;
        }
        var csrftoken = getCookie('csrftoken');

        function csrfSafeMethod(method) {
            // these HTTP methods do not require CSRF protection
            return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
        }
        $.ajaxSetup({
            beforeSend: function(xhr, settings) {
                if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
                    xhr.setRequestHeader("X-CSRFToken", csrftoken);
                }
            }
        });
        $("#id_Time").change(function () {
            var form = $(this).closest("form");

            $.ajax({
                url: form.attr("data-validate=time-url"),
                data: {

                'time': time
            },
            dataType: 'json',
            sucess: function (data) {
                if (data.is_taken) {
                    alert("Sorry this time is not available")

                }

            }

        });

    </script>


{% endblock %}



{% block content %}

<div class="container">
    <form method="post" data-validate-time-url="{% url 'validate_time' %}" 
     #{{%csrf_tonen%}}   *this is where the csrf token was before ajax*
     {{ form|crispy }}
    <input type="submit" value="Add Reservation"/>
    </form>
</div>
{% endblock %}

views.py

def Add_Reservation(request):
    """Renders the add reservation page."""
    form = ReservationsForm(request.POST, request.FILES)
    if request.method == "POST":
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('')
    else:
        form = ReservationsForm()
    return render(request,'app/AddReservation.html',{'form': form})

from django.db.models import Sum
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_protect

@csrf_protect
def validate_time(request):
    DATE= request.GET.get('Date')
    psize_input= request.GET.get('psize')
    tme= request.GET.get('Time')

    data = {
        'is_taken': Reservation.objects.filter(DATE,Time).annotate(Sum('psize')).filter(psize__sum__lte=15-psize_input)

        }
    if data['is_taken']:
        data['error_message'] = 'This time slot is full, try another!'
    return JsonResponse(data)

forms.py

SEASON=('2019',)
MONTHS = {
    5:_('May'), 6:_('Jun'), 7:_('Jul'), 8:_('Aug'),
    9:_('Sep'), 10:_('Oct')
}



class ReservationsForm(forms.ModelForm):
    class Meta:
        model = Reservation
        fields = ('name', 'psize', 'Date', 'Time', 'location')
        widgets = {'Date': SelectDateWidget(years=SEASON,months=MONTHS),}

Я хочу, чтобы форма взаимодействовала с пользователем, если пользователь выбирает время, когда резервирование недоступно. Я думал, что лучший способ сделать это - использовать запросы AJAX. Как я могу улучшить это и устранить ошибку 403?

Спасибо, что заглянули!

...