当前位置:知识百科 > 正文

Django中的ajax请求_Django请求生命周期

更新时间:2026-03-14 15:24 阅读量:50

此时此刻呢我将为你详细讲解Django中的Ajax请求的完整攻略,包含两个示例说明.

第一段:什么是Ajax请求

Ajax是Asynchronous JavaScript and XML的缩写,即使用JavaScript在不重新加载整个页面的情况下异步地与服务器交换数据.Ajax技术使用了XMLHttpRequest对象与服务器进行异步通信,然后使用JavaScript动态地更新页面.

第二段:Django中实现Ajax请求的步骤

1. 引入jQuery库



2. 在Django中设置CSRF Token

在Django中使用POST请求时,需要向服务器发送一个CSRF Token,以确保服务器可以认证请求的合法性.可以使用{% csrf_token %}模板标签或者手动获取CSRF Token并在请求中发送.

{% csrf_token %}

或者

function getCookie(name) {
  // function to get a cookie by name
  if (!document.cookie) {
return null;
  }

  const xsrfCookies = document.cookie.split(';')
.map(c => c.trim())
.filter(c => c.startsWith(name + '='));

  if (xsrfCookies.length === 0) {
return null;
  }
  return decodeURIComponent(xsrfCookies[0].split('=')[1]);
}

const csrftoken = getCookie('csrftoken');

在发送Ajax请求时,需要加上CSRF Token:

$.ajax({
  url: '/test',
  type: 'POST',
  data: {
'name': 'John Doe'
  },
  headers: {
'X-CSRFToken': csrftoken
  },
  success: function (data) {
console.log(data);
  }
});

③ 编写Django视图函数

在Django中编写视图函数,以处理Ajax请求.Django中视图函数常用的方式是返回Json数据.

from django.http import JsonResponse

def test(request):
if request.method == 'POST':
    name = request.POST.get('name')
    result = {
        'name': name
    }
    return JsonResponse(result, status=200)

④ 发送Ajax请求

在前端页面上,使用jQuery库中的$.ajax()方法发送Ajax请求.

$.ajax({
  url: '/test',
  type: 'POST',
  data: {
'name': 'John Doe'
  },
  headers: {
'X-CSRFToken': csrftoken
  },
  success: function (data) {
console.log(data);
  }
});

以上为Django中实现Ajax请求的基本步骤.

第三段:示例一:实现一个评论功能

此时此刻呢,我将通过一个评论功能示例来演示Ajax请求的使用.在这个示例中,我们将使用Ajax请求以异步方式提交表单数据,并使用返回的Json数据更新评论列表.

1. Html模板

在Html模板中添加评论表单和评论列表.


2. Django视图函数

在Django视图函数中处理Ajax请求,并返回Json格式的数据.

from django.shortcuts import render
from django.http import JsonResponse

def comment(request):
if request.method == 'POST':
    text = request.POST.get('text')
    comment = Comment(text=text)
    comment.save()
    comments = Comment.objects.all()
    data = {
        'comments': [{'text': comment.text} for comment in comments]
    }
    return JsonResponse(data, status=200)

comments = Comment.objects.all()
return render(request, 'comment.html', {'comments': comments})

③ Javascript代码

使用jQuery库中的$.ajax()方法处理表单提交,提交成功后更新评论列表.

$(document).ready(function() {
  const csrftoken = getCookie('csrftoken');

  // 处理评论表单提交
  $('#comment-form').submit(function(e) {
e.preventDefault();

const formData = $(this).serializeArray();
const url = $(this).attr('action');

$.ajax({
  url: url,
  type: 'POST',
  data: formData,
  headers: {
    'X-CSRFToken': csrftoken
  },
  success: function(data) {
    const comments = data.comments;
    let html = '';
    comments.forEach(function(comment) {
      html += +
  • ${comment.text}
  • +; }); $('#comment-list').html(html); $('#comment-form')[0].reset(); // 重置表单 } }); }); // 获取csrf token的函数 function getCookie(name) { if (!document.cookie) { return null; } const xsrfCookies = document.cookie.split(';') .map(c => c.trim()) .filter(c => c.startsWith(name + '=')); if (xsrfCookies.length === 0) { return null; } return decodeURIComponent(xsrfCookies[0].split('=')[1]); } });

    运行示例,在评论表单中输入评论内容并提交,应该可以在评论列表中看到新的评论.

    第四段:示例二:实现一个点赞功能

    1. Html模板

    在Html模板中添加点赞按钮和点赞数.

     {{ post.like_count }}
    
    

    2. Django视图函数

    from django.shortcuts import render
    from django.http import JsonResponse
    
    def like(request, post_id):
    if request.method == 'POST':
        post = Post.objects.get(id=post_id)
        post.like_count += 1
        post.save()
        data = {
            'like_count': post.like_count
        }
        return JsonResponse(data, status=200)
    
    post = Post.objects.get(id=post_id)
    return render(request, 'post.html', {'post': post})
    
    

    ③ Javascript代码

    使用jQuery库中的$.ajax()方法处理点赞操作,操作成功后更新点赞数.

    $(document).ready(function() {
      const csrftoken = getCookie('csrftoken');
    
      // 处理点赞按钮点击事件
      $('#like-btn').click(function(e) {
    e.preventDefault();
    
    const url = $(this).attr('href');
    const likeCountElem = $('#like-count');
    
    $.ajax({
      url: url,
      type: 'POST',
      data: {},
      headers: {
        'X-CSRFToken': csrftoken
      },
      success: function(data) {
        likeCountElem.text(data.like_count);
      }
    });
      });
    
      // 获取csrf token的函数
      function getCookie(name) {
    if (!document.cookie) {
      return null;
    }
    
    const xsrfCookies = document.cookie.split(';')
      .map(c => c.trim())
      .filter(c => c.startsWith(name + '='));
    
    if (xsrfCookies.length === 0) {
      return null;
    }
    return decodeURIComponent(xsrfCookies[0].split('=')[1]);
      }
    });
    
    

    至此,Django中实现Ajax请求的完整攻略已经讲解完毕.如果你有其他问题,可以继续问我.