如何解决403错误python,django,ajax,javascript?

时间:2018-11-05 00:05:18

标签: javascript json python-3.x django-forms http-status-code-403

我正尝试在我的Django表单中使用ajax请求。在尝试实现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错误消失?

感谢您的光临!

0 个答案:

没有答案
相关问题