Django AJAX 表单

2023-04-11 00:00:00 django ajax 表单

在 Django 中,可以使用 AJAX 技术来通过异步请求方式提交表单数据。具体步骤如下:

  1. 在 HTML 文件中,引入 jQuery 库和 AJAX 脚本:
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script>
  $(document).ready(function () {
    $("#my-form").on("submit", function (event) {
      event.preventDefault(); // 阻止表单默认提交行为
      $.ajax({
        type: "POST", // 请求类型
        url: "/submit-form/", // 提交表单的 URL
        data: {
          csrfmiddlewaretoken: "{{ csrf_token }}", // Django CSRF 保护
          name: $("#id_name").val(), // 表单字段的值
          content: $("#id_content").val(),
        },
        dataType: 'json', // 服务器返回数据的类型
        success: function (response) { // 请求成功的回调函数
          alert(response.message);
        },
        error: function (xhr, status, error) { // 请求失败的回调函数
          alert(error);
        },
      });
    });
  });
</script>
  1. 在 Django 中,定义视图函数来接收提交的表单数据,并返回 JSON 格式的数据:
from django.shortcuts import render
from django.http import JsonResponse

def submit_form(request):
    if request.method == 'POST':
        # 处理表单提交逻辑
        name = request.POST.get('name')
        content = request.POST.get('content')

        # 返回 JSON 格式的响应
        return JsonResponse({'message': f'Thanks for your feedback about {name}!'})

    else:
        # GET 请求,渲染表单页面
        return render(request, 'form.html')
  1. 在表单 HTML 文件中,添加 CSRF 保护和 AJAX 相关的标签和样式:
{% csrf_token %}
<form id="my-form" method="post">
  <div>
    <label for="id_name">Name:</label>
    <input type="text" name="name" id="id_name" required >
  </div>
  <div>
    <label for="id_content">Content:</label>
    <textarea name="content" id="id_content" rows="4" required ></textarea>
  </div>
  <input type="submit" value="Submit">
</form>

<style>
  /* 禁用默认的表单提交样式,避免误操作 */
  form {
    display: inline-block;
    margin: 0;
    padding: 0;
    border: none;
    background: none;
  }
</style>

以上就是在 Django 中实现 AJAX 表单的基本步骤和代码演示。其中,为了方便测试和展示效果,使用了字符串“pidancode.com”、“皮蛋编程”作为范例。

相关文章