django 使用JS更新个人资料照片

ws51t4hk  于 2023-08-08  发布在  Go
关注(0)|答案(1)|浏览(153)

我正在编写一个Django应用程序,其中有一个按钮可以更改个人资料照片,点击后,会出现一个文件选择屏幕。选择文件后,我看到上传成功消息,但我选择的新图像没有写入数据库。我好几天都过不了这一关。
模板js代码:

  1. <script>
  2. // JavaScript
  3. document.addEventListener("DOMContentLoaded", function () {
  4. const uploadButton = document.getElementById("uploadButton");
  5. const fileInput = document.getElementById("fileInput");
  6. uploadButton.addEventListener("click", function () {
  7. fileInput.click();
  8. });
  9. fileInput.addEventListener("change", function () {
  10. const formData = new FormData(document.getElementById("profileForm"));
  11. fetch("{% url 'update_profil_photo' %}", {
  12. method: "POST",
  13. body: formData,
  14. headers: {
  15. "X-CSRFToken": '{{ csrf_token }}'
  16. }
  17. })
  18. .then(response => response.json())
  19. .then(data => {
  20. if (data.success) {
  21. alert("Sucessfully updated!");
  22. } else {
  23. alert("An error occured, please try again.");
  24. }
  25. })
  26. .catch(error => {
  27. alert("an error occured, please try again.");
  28. });
  29. });
  30. });
  31. </script>

字符串
模板html:

  1. <form method="post" enctype="multipart/form-data" action='{% url "update" %}' id="profileForm">
  2. {% csrf_token %}
  3. <button class="btn btn-info" type="button" id="uploadButton">
  4. <i class="fa fa-fw fa-camera"></i>
  5. <span>Change Photo</span>
  6. </button><input id="fileInput" type="file" style="display: none;">
  7. </div>
  8. </div>


浏览次数:

  1. @login_required
  2. def update_profil_photo(request):
  3. user_profile = get_object_or_404(UserProfile, user=request.user)
  4. user = request.user
  5. if request.method == 'POST':
  6. profile_form = UserProfilePictureUpdateForm(request.POST, request.FILES, instance=user_profile)
  7. if profile_form.is_valid():
  8. profile_form.save()
  9. messages.success(request, 'Update is successful')
  10. return JsonResponse({'success': True})
  11. else:
  12. profile_form = UserProfilePictureUpdateForm(instance=user_profile)
  13. return render(request, 'profile.html', {'profile_form': profile_form})

k5ifujac

k5ifujac1#

工作脚本应为:

  1. document.addEventListener("DOMContentLoaded", function () {
  2. const uploadButton = document.getElementById("uploadButton");
  3. const fileInput = document.getElementById("fileInput");
  4. uploadButton.addEventListener("click", function () {
  5. fileInput.click(); // Trigger the file input element's click event
  6. });
  7. fileInput.addEventListener("change", function () {
  8. const formData = new FormData(); // Create a new FormData object
  9. formData.append("profile_photo", fileInput.files[0]); // Append the selected file to the form data
  10. const xhr = new XMLHttpRequest();
  11. // AJAX request
  12. xhr.onload = function () {
  13. if (xhr.status === 200) {
  14. const response = JSON.parse(xhr.responseText);
  15. if (response.success) {
  16. alert("Success");
  17. } else {
  18. alert("Error");
  19. }
  20. } else {
  21. alert("Error");
  22. }
  23. };
  24. // AJAX request settings
  25. xhr.open("POST", "{% url 'update_profil_photo' %}", true);
  26. xhr.setRequestHeader("X-CSRFToken", '{{ csrf_token }}');
  27. xhr.send(formData); // Send the form data as the request body
  28. });
  29. });

字符串

展开查看全部

相关问题