XMLHttpRequest не может загрузиться из-за проверок контроля доступа для AJAX с Django - PullRequest
0 голосов
/ 08 февраля 2019

Я работаю над проектом, использующим Python (2.7) и Django (1.10), в котором я использую Ajax для выполнения запросов из шаблонов Django и представлений Django. Он работал отлично, но затем у меня есть настройка SSLна моем сервере для этого сайта Django и после того, как я получаю эту ошибку при выполнении таких запросов:

Вот что я сделал до сих пор:

Вот мой шаблон add_category.html:

{% extends 'dashboard_base.html' %}
{% load staticfiles %}

{% block title %}
  <title>Category</title>
{% endblock %}

<!-- main content -->
    {% block content %}
    <div class="main-content">
        <div class="content-header clearfix">
          <h2 class="pull-left">Add New Category</h2>
          <ol class="breadcrumb pull-right">
            <li><a href="/dashboard"><i class="fa fa-dashboard"></i> Home</a></li>
            <li class="active">Add New Category</li>
          </ol>
        </div>

        <div class="content">
            <div class="clearfix">
                <div class="content-box">
                    <div class="content-box-header">
                        <h4>Add New Category</h4>
                    </div>
                        <div class="content-box-inner"> 
                            <form class="custom-form" action="{% url 'category_add' %}" method="post" id="addcategory">
                                {% csrf_token %}                                
                                <div class="row">
                                    <div class="form-group col-md-12">
                                        <label>Category Name</label>
                                        <input type="text" name="title" id="title" class="form-control" placeholder="Category name">
                                    </div>
                                    <div class="form-group col-md-12">
                                        <label>Category Position</label>
                                        <input type="number" name="position" id="position" class="form-control" min="1" value="1">
                                    </div>
                                    <div class="form-group col-sm-12">
                                        <label>Description</label>
                                        <textarea class="form-control" placeholder="Description" name="description" id="description" ></textarea>
                                    </div>
                                    <div class="form-group col-sm-12">
                                        <label class="checkbox">
                                            <input type="checkbox" name="enable_category" id="enable_category" class="form-control" value="1" checked="checked">
                                            <span>Enable Category</span>
                                        </label>
                                    </div>
                                </div>
                                <div class="form-group">
                                    <button type="button" id="add_category" class="btn btn-default bg-green"><i class="fa fa-floppy-o"></i>Save</button>
                                </div>
                            </form>
                        </div>
                </div>
            </div>
        </div>
    </div>
    {% endblock %}

{% block js %}
<script src="{% static 'dashboard/js/jquery.min.js' %}"></script>
<script src="{% static 'dashboard/js/category.js' %}"></script>
<script type="text/javascript">
    var baseurl="http://{{ request.META.HTTP_HOST }}/dashboard";
    var csrf="{{csrf_token}}";
</script>
{% endblock %}

Я пытался изменить baseurl в {% block js %} above с http на https, но ошибка все та же.

А вот category.js:

$('#add_category').click(function(){ 
  var title = $('#title').val().trim()
  var description = $('#description').val().trim()
  var position = $('#position').val()
  var enable_category = '';
  if(title.length == 0)
  {
    $('#title').addClass("data_is_empty");
    return false;
  }
  if(description.length == 0)
  {
    $('#description').addClass("data_is_empty");
    return false;
  }
  if(position.length == 0)
  {
    $('#position').addClass("data_is_empty");
    return false;
  }
  if(parseInt(position) < 1)
  {
    $('#position').addClass("data_is_empty");
    return false;
  }

  $("input:checkbox[name=enable_category]:checked").each(function(){
    enable_category = $(this).val()
  });

  data={}

  data['title'] = title;
  data['description'] = description;
  data['position'] =position;
  data['csrfmiddlewaretoken'] = csrf;
  data['enable_category'] = enable_category;
  console.log('-=-=-=-=-=-=-');
  console.log(data);

  url=baseurl+"/category/add/";
  $('.loader').css('display','block');
  $(this).attr('disabled','disabled');
  $.ajax({
        url:url,
        type:'POST', 
        data:data,                  
        success:function(response)
        {
          var message = JSON.parse(response);
          $('.loader').css('display','none');
          $(this).removeAttr('disabled');
          if(message.error)
          {
            $('#class_for_icon').removeClass('fa-check-circle')
            $('#class_for_icon').addClass('fa-ban')

            $('.flash_msg').css('display','block');
            $('.flash_msg_text').text('Some error occur.')
            window.setTimeout(function () {
                $(".auto_hide").fadeTo(500, 0).slideUp(500, function () {
                    $('.auto_hide').css('display','none');
                });
            }, 2000);
            // window.setTimeout(function () {
            //     location.reload();
            // }, 2000);
          }
          if(message.success)
          {
            $('#class_for_icon').removeClass('fa-ban')
            $('#class_for_icon').addClass('fa-check-circle')
            $('.flash_msg').css('display','block');
            $('.flash_msg_text').text('Saved Successfully')
            window.setTimeout(function () {
                $(".auto_hide").fadeTo(500, 0).slideUp(500, function () {
                    $('.auto_hide').css('display','none');
                });
            }, 2000);
            window.setTimeout(function () {
                location.reload();
            }, 2000);
          }
        }
   });
});

С views.py:

def category_add(request):
    user_type = ''
    try:
        user_type = request.session['user_type']
    except Exception as e:
        pass
    if user_type == 'admin':
        if request.method == "POST":
            title = request.POST['title']
            description = request.POST['description']
            position = request.POST['position']
            enable_category = request.POST['enable_category']
            try:
                if enable_category:
                    obj = Categories(title=title, description=description, position=position)
                    obj.save()
                else:
                    obj = Categories(title=title, description=description, enable_flag=0, position=position)
                    obj.save()
                return HttpResponse(json.dumps({'success': 'Updated Successfully'}))
            except Exception as e:
                return HttpResponse(json.dumps({'error': 'Something went wrong'}))
        if request.method == "GET":
            return render(request, "add_category.html")

И вот полная ошибка, которую я получаю в консоли браузера:

[Ошибка] Не разрешено запрашивать ресурс
отправить (jquery.min.js: 4: 26582)

ajax (jquery.min.js: 4: 22185)
(анонимная функция) (category.js: 44)

рассылка (jquery.min.js: 2: 41778)

[Ошибка] XMLHttpRequest не может загрузить http://www.orderfetchers.com/dashboard/category/add из-за проверок контроля доступа.
send (jquery.min.js: 4: 26582)
ajax (jquery.min.js: 4: 22185)
(анонимная функция) (category.js: 44) рассылка (jquery.min.js: 2: 41778)

Примечание:

Это происходит только послеВключение SSL для моего сайта до того, как он работал отлично.


Другое обновление: В Chrome я вижу эту ошибку: Mixed Content: The page at 'https://www.orderfetchers.com/dashboard/category/add' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint 'http://www.orderfetchers.com/dashboard/category/add/'. This request has been blocked; the content must be served over HTTPS.

Обновление: вот моя конфигурация apache2:

Alias /static /home/abdul/Fetchors/static
  <Directory /home/abdul/Fetchors/static>
    Require all granted
  </Directory>

  Alias /media /home/abdul/Fetchors/media
  <Directory /home/abdul/Fetchors/media>
    Require all granted
  </Directory>

  <Directory /home/abdul/Fetchors/Fetchors>
    <Files wsgi.py>
      Require all granted
    </Files>
  </Directory>
WSGIScriptAlias / /home/abdul/Fetchors/Fetchors/wsgi.py
WSGIDaemonProcess django_app python-path=/home/abdul/Fetchors python-home=/home/abdul/Fetchors/venv
WSGIProcessGroup django_app

Что там может быть не так?

Заранее спасибо!

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