使用Ajax与Django通信实例

Posted Django编程

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Ajax与Django通信实例相关的知识,希望对你有一定的参考价值。

我的开发环境
  • Django 1.11.4

  • Python 3.5.1

  • Jquery 1.11.2

简单需求描述

网页中一个表格,点击启动按钮后,服务器执行启动动作,并且执行后需要根据返回码更新界面。这是一个典型的Ajax需求,我们使用Jquery库一步一步实现这个过程。

下面记录使用过程
步骤1. html中定义一个button按钮

在Django的Template文件中,定义一个id为btn_start_task的button,并且该Button在Form标签中。

<form method="post">
{% csrf_token %}
<button id="btn_start_task" value={{ task.id }} type="button" class="btn btn-xs btn-default">启动</button>
</form>
步骤2. Url路由设置

设置完前端后,我们创建一个路由,将url路径与view函数对应,同时起个名字,这个名字在Ajax函数中可以用  url: ‘{% url “StartEvalTask” %}’, 也可以用url: ‘/ajax/start_eval_task/‘引用

url(r'^ajax/start_eval_task/$', views.start_eval_task, name='StartEvalTask'),
步骤3. 使用Jquery挂接Button的click函数

task_id取自button中的value作为参数,这个函数的意思是,一旦点击按钮,就调用url对应的函数,并且传递参数data过去,类型为Json。如果顺利执行完,会弹框提醒执行完毕。

$(document).ready(function() {
    $("#btn_start_task").click(function () {
       task_id=$(this).attr("value")
      $.ajax({
        url: '{% url "StartEvalTask" %}',
        data: {json_data: JSON.stringify({'task_id': task_id})},
        dataType: 'json',
        success: function (data) {          if (data.start_completed==1) {
            alert("start_completed!!!");
            // 其他操作;
          }
        }
      }); 
    });
  });

注1. JSON.stringify函数作用是将javascript对象转换为JSON字符串。

步骤4. View中执行函数的定义

通过Ajax传递过来的数据,需要用json.loads去获取,注意返回值是字典。

import jsondef start_eval_task(request):
    dict = json.loads(request.GET.get('json_data'))
    task_id = dict['task_id']
    task = EvalTask.objects.get(id=task_id)
    task.start()
    data = {        'start_completed': 1
    }    return JsonResponse(data)

框架就是这样,可以根据实际需求,继续扩展。

以上是关于使用Ajax与Django通信实例的主要内容,如果未能解决你的问题,请参考以下文章

Django Web开发使用Ajax增强用户体验

Django的日常-AJAX

Django rest_framewok框架的基本组件

axios与djangopost通信 后端获取数据

回顾ajax

雷林鹏分享:PHP - AJAX 与 MySQL