Как отправить данные формы из представления ajax в Django в запросе PUT? - PullRequest
0 голосов
/ 23 января 2020

Я отправляю вызов ajax в представление python django (без остальной структуры) и хочу выполнить операцию обновления в django с использованием запроса PUT.

Эта операция обновления также затрагивала файлы, поэтому я не знаю, как выполнить операцию PUT для файлов. Я выполнил операции GET, POST, DELETE, но не понял PUT. Я отправляю объект formdata из ajax. Заранее спасибо !!

Вот мой код

HTML СТРАНИЦА

<!DOCTYPE html>
<html lang="en">
<head>
  <title>Bootstrap Example</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"></script>
</head>
<body>

<div class="container">
  <form action="" id="submitassignment" method="post" role="form" enctype="multipart/form-data">
    <div class="form-group">
        <input type="hidden" value="{{ obj.id }}" id="id">
      <label for="email">Name:</label>
      <input type="text" class="form-control" id="name" placeholder="Enter email" name="name" value="{{ obj.name }}">
    </div>
    <div class="form-group">
      <label for="pwd">age:</label>
      <input type="number" class="form-control" id="age" placeholder="Enter password" name="age" value="{{ obj.age }}">
    </div>
      <div class="form-group">
      <label for="pwd">profile_photo:</label>
      <input type="file" class="form-control" id="profile_photo" placeholder="Enter password" name="profile_photo" value="{{ obj.profile_photo.url }}">
    </div>
    <div class="form-group form-check">
      <label class="form-check-label">
        <input class="form-check-input" type="checkbox" name="remember"> Remember me
      </label>
    </div>
    <button class="btn btn-success btn-sm" type="submit" form="submitassignment" id="assignment_submit_button">Submit</button>
  </form>
</div>

</body>
<script>
        $(document).ready(function () {
        $("#submitassignment").submit(function (e) {
            e.preventDefault();
            var formdata = new FormData();
            formdata.append("profile_photo", $("#profile_photo")[0].files[0])
            formdata.append("name", $("#name").val())
            formdata.append("age", $("#age").val())
            formdata.append("id", $("#id").val())
            console.log(formdata)

           $.ajax({
                url: "/student/",
                method: "PUT",
                async: false,
                cache: false,
                contentType: false,
                enctype: 'multipart/form-data',
                processData: false,
                data: formdata,
                success: function (response) {
                }
            })
        })
    })
</script>
</html>

PYTHON ПРОСМОТР

@csrf_exempt
def student_operation(request):
    if request.method == "GET":
        obj = Student.objects.all()
        return render(request, "datatables.html", {"obj": obj})
    elif request.method == "POST":
        name = request.POST.get("name")
        age = request.POST.get("age")
        profile_photo = request.FILES.get("profile_photo")
        obj = Student(name=name, age=age, profile_photo=profile_photo)
        obj.save()
        return HttpResponse("success")
    elif request.method == "DELETE":
        data = json.loads(request.body)
        id = data.get('id')
        obj = Student.objects.get(id=id)
        obj.delete()
        return HttpResponse("success")
    elif request.method == "PUT":
        pass
        # Need to do code here

URL

path('student/', student_operation, name='student'),
...