Django Ajax Изображение отправлено - PullRequest
0 голосов
/ 16 марта 2020

Я пытаюсь загрузить и сохранить файл изображения, используя Django, и отправить само изображение для использования в текущих javascript функциях.

Проблема в том, что изображение не сохраняется, request.FILES пусто.

При использовании request.body я вижу, что существует не фактический путь к файлу, а C: //fakepath.

Поскольку я хочу загруженное изображение, чтобы сохранить немедленно, я делаю сообщение, используя вызов jquery ajax, затем данные сохраняются, создавая новый объект, затем функция должна вернуть успех, что она и делает.

просмотров. py:

    def image_feedback(request):
        if request.method == 'POST':

            image = request.FILES.get('image')

            ImagesUpload.objects.create(
                image = image,
            )

            return HttpResponse('success')

models.py:

    class ImagesUpload(models.Model):
        image = models.ImageField(upload_to=renaming_file)

        def __str__(self):
            return str(self.image)

form_template. html:



<form id="image_form" enctype="multipart/form-data">{% csrf_token %}
  <button class="btn btn-secondary" onclick="$('#id_image').click()">Import Image</button>

  {{ form_image.image }}

  <input id="hidden-submit-img" value="SUBMIT" type="submit" style="visibility:hidden">
</form>

jquery ajax вызов:

<script>



    $(document).ready(function () {
      // This jquery changes the appearance of the django { form_image }
      var imgElement = $('#id_image');

      imgElement.css('visibility', 'hidden');

      // This function triggers the hidden submit,
      //  which triggers the ajax image request
      imgElement.on({
        change: function () {
          $('#hidden-submit-img').click();
        },
      });
    });


    // This jquery is for the ajax post of the image
    $('#image_form').submit(function (event) {
      event.preventDefault();
      $.ajax({
        data: {
          image: $('#id_image').val(),
          csrfmiddlewaretoken: '{{ csrf_token }}'
        },
        type: "POST",
        enctype: 'multipart/form-data',
        url: "{% url 'website:image-feedback' %}",
        success: function (data) {
          console.log(1);
          console.log(data)
        },
        error: function (data) {
          console.log(0);
        }

      });
    });

    </script>

Я думаю, что изображение не может быть сохранено, потому что javascript не проходит правильный путь, но как решить эту проблему?

РЕДАКТИРОВАТЬ:

При изменении события с .submit на .change в вызове ajax изображение сохраняется, и я вижу успешный console.log в моем браузере, НО HttpResponse («success») отображает новую пустую страницу, содержащую только слово «success».

Как я могу помешать HttpResponse сделать это? Изменение события обратно на .submit предотвращает перезагрузку страницы, но изображение не может быть сохранено

Вот мой новый вызов ajax, views.py остается неизменным:

// This jquery is for the ajax post of the image

    // Doing it with submit, the image wont get saved, but the request is "success"
    // $('#image_form').submit(function (event) {

    // Doing it with change, the image gets saved successfully, 
    // the console logs the success
    // but the respond loads a new page
    $('#image_form').change(function (event) {
      event.preventDefault();
      $.ajax({
        data: {
          image: $('#id_image').val(),
          csrfmiddlewaretoken: '{{ csrf_token }}'
        },
        enctype: 'multipart/form-data',
        type: $(this).attr('method'),
        url: $(this).attr('action'),
        success: function (data) {          
          console.log(1);
          console.log(data)
        },
        error: function (data) {
          console.log(0);
        }

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