Django 之Ajax

介绍

Ajax

  Ajax(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”。即使用Javascript语言与服务器进行异步交互,传输的数据为XML(当然,传输的数据不只是XML)。

  • 同步交互:客户端发出一个请求后,需要等待服务器响应结束后,才能发出第二个请求;
  • 异步交互:客户端发出一个请求后,无需等待服务器响应结束,就可以发出第二个请求。

  Ajax除了异步的特点外,还有一个就是:浏览器页面局部刷新;(这一特点给用户的感受是在不知不觉中完成请求和响应过程)。因此使用ajax的主要特点有如下几点:(1)Ajax使用Javascript技术向服务器发送异步请求;(2)Ajax无须刷新整个页面;(3)因为服务器响应内容不再是整个页面,而是页面中的局部,所以Ajax性能高。在django入门项目中我们已经简单的介绍了一下ajax应用。下面我们将做详细介绍。

Ajax的优缺点

优点:

Ajax使用JavaScript技术向服务器发送异步请求;

Ajax无须刷新整个页面,提高用户的体验度

因为服务器响应内容不再是整个页面,而是页面中的局部,所以Ajax性能高

关于AJAX的例子

ajax实现方式(无参数)

  具体实现方式实例如下(完成一次ajax请求,且完成了一个局部刷新):

html文件部分:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Title</title>
    <script src="/static/js/jquery-3.2.1.min.js"></script>
</head>
<body>
<h3>INDEX</h3>
<button class="s1">send_ajax</button>
<p class="name"></p>

<script>
    // ajax的无参请求
    $(".s1").click(function () {
        // 触发ajax事件
        $.ajax({
            url: "/ajax_handle/",
            type: "get",
            success: function (data) {   {# data相当于服务端拿过来的"黎诗"的数据 #}
{#  当某一个事件完成之后,固定执行另外一个函数      #}
{#  在这里success也相当于一个回调函数, 当我们请求过去,到达服务器,服务器响应过来return HttpResponse("黎诗"),这里success开始工作 ,把数据响应到客户端 这样就是完整的过程   #}
                console.log(data);
{#                完成一次ajax请求,且完成了一个局部刷新#}
                $(".name").html(data)  {# 把一个data字符串赋到一个文本上 #}
            }
        })
    });

</script>
</body>
</html>

from django.shortcuts import render,HttpResponse

# Create your views here.

def index(request):
    return render(request,"index.html")

def ajax_handle(request):
    return HttpResponse("黎诗")

Views.py

    url(r‘^index/‘, views.index),  # index(request) 必须需传一个参数
    url(r‘^ajax_handle/‘, views.ajax_handle),  # index(request)

urls。py

关于AJAX的有参操作

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Title</title>
    <script src="/static/js/jquery-3.2.1.min.js"></script>
</head>
<body>

<input type="text" id="n1">+<input type="text" id="n2">=<input type="text" id="sum">

{#为什么不需要name标签:form表单的作用,点submit的按钮,自动绑定事件,以name,ajax,是我们直接拼键值对了,我们写的是什么,他就是什么#}
<button class="count">计算</button>

<script>

    // ajax的有参请求

    //绑定点击事件
    $(".count").click(function () {
        //触发ajax请求
        $.ajax({
            url:"/count/",
{#            data-->指定你要放的参数#}
            data:{"num1":$("#n1").val(),"num2":$("#n2").val()},
        {# 这里写的都是JavaScript代码,与Python无关,不是字典,是基于js的数据类型,obj类型#}
{#        这里加键值对#}
            success:function (data) {
                console.log(data);
                $("#sum").val(data)

            }
        })
    })
</script>
</body>
</html>

def count(request):
    num1 = request.GET.get("num1")
    num2 = request.GET.get("num2")
    ret = int(num1)+int(num2)
    return HttpResponse(str(ret))

逻辑处理views.py

注意点

data里面的类型须是符合序列化字符串

校验用户注册信息

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Title</title>
    <script src="/static/js/jquery-3.2.1.min.js"></script>
</head>
<body>

{% csrf_token %}
<h4>校验用户是否存在</h4>
<input type="text" id="user"><span></span>

<script>

    //校验注册信息
    $("#user").blur(function () {
        $.ajax({
            url: "/jiaoyan_user/",
            type: "post",
            data: {
                "user": $("#user").val(),
                "csrfmiddlewaretoken": $("[name=‘csrfmiddlewaretoken‘]").val()},
            success: function (data) {
                console.log(data);

                var data = JSON.parse(data);
                {#                反序列化为字典#}
                if (data.is_reg) {
                    $("#user").next().html("该用户已注册").css("color","red");
                    {#                    当注册,添加错误信息,#}
                }
            }
        })
    })
</script>
</body>
</html>

def jiaoyan_user(request):
    response={"is_reg":True}
    user=request.POST.get("user")
    # == 表示在数据库里有
    if user == "jassin":
        pass
    else:
        response["is_reg"] = False
    import json
    # 返回到页面,要序列化成字符串
    return HttpResponse(json.dumps(response))

Views.py

  url(r‘^jiaoyan_user/‘, views.jiaoyan_user),  # index(request)

urls.py

注意点

关于csrf错误

原文地址:https://www.cnblogs.com/jassin-du/p/8386926.html

时间: 2024-08-30 00:53:34

Django 之Ajax的相关文章

python Django之Ajax

python Django之Ajax AJAX,Asynchronous JavaScript and XML (异步的JavaScript和XML),一种创建交互式网页应用的网页开发技术方案. 异步的JavaScript:使用 [JavaScript语言] 以及 相关[浏览器提供类库] 的功能向服务端发送请求,当服务端处理完请求之后,[自动执行某个JavaScript的回调函数].PS:以上请求和响应的整个过程是[偷偷]进行的,页面上无任何感知. XMLXML是一种标记语言,是Ajax在和后台

Django+JQuery+Ajax+Post方案中的问题及解决

遇到的问题 请求发送后,服务端无响应 Django对于POST请求会检查请求来源,表单方式提交时: 在Form内添加 `{% csrf_token %}` 标签: request响应函数前,添加 `@csrf_exempt` ; Jquery POST 方式提交时,在服务端添加了 @csrf_exempt ,在Django1.5版本后,无法直接通过POST获取参数,通过`raw_data = request.body` 获取数据时,出现如下错误提示: Exception: You cannot

django + jQuery AJAX初试

经过反复的测试,终于在django+jQuery AJAX成功返回服务器数据,本次测试在/static/test/test.txt test.txt: txt = {'1':'re','2':'qqq','3':'www','4':'rere'} views: def test(request): return render(request,'app/accounts/test.html') urls: urlpatterns = [ url(r'^test/$',views.test), ]

django 接受 ajax 传来的数组对象

django 接受 ajax 传来的数组对象 发送:ajax 通过 POST 方式传来一个数组 接收:django 接受方式 array = request.POST.getlist('key[]') 其中,key为包含该数组的键值对的键. 尤其要注意"[]",少了它将不能接受成功 为什么要加"[]"? 分析前台发送数据,我们会发现:ajax自动给数组中的数据的键名后添加了"[]"

js界面刷新&Django使用Ajax实现页面无刷新评论回复功能

Django使用Ajax实现页面无刷新评论回复功能 http://www.cnblogs.com/mfc-itblog/p/5188900.html js界面刷新 http://www.cnblogs.com/dingdingo/archive/2011/10/26/2225307.html js界面刷新&Django使用Ajax实现页面无刷新评论回复功能

12.Django与ajax

Django与ajax 01.AJAX简介: AJAX(Asynchronous Javascript And XML)翻译成中文就是"异步Javascript和XML". *同步交互:客户端发出一个请求后,需要等待服务器响应结束后,才能发出第二个请求 *异步交互:客户端发出一个请求后,无需等待服务器响应结束,就可以发出第二个请求 *AJAX除了异步的特点外,还有一个就是:浏览器页面局部刷新 优点: AJAX使用Javascript技术向服务器发送异步请求 AJAX无须刷新整个页面 0

Django使用Ajax实现页面无刷新评论回复功能

虽然Django本身自带Form可以提交表单,但在Django中结合Jquery使用Ajax,可以让Django开发的应用发挥更好的用户体验,同时可以降低服务器的负担.普通提交表单方式需要刷新整个页面才可以将评论显示出来,而使用Ajax提交评论之后,可以在页面无刷新的情况下显示出来. 首先是model: class Replay(models.Model): content = models.TextField() post = models.ForeignKey(Post) replay_ti

django + jQuery AJAX POST数据

废话少说,直接代码伺候: views: from django.http import JsonResponse def test_post(request): name = request.POST['name'] city = request.POST['city'] qq = request.POST['qq'] dict = {'name':name,'city':city,'qq':qq} return JsonResponse(dict) def test(request): ret

My First Django Project - &lt;Django + MySQL + Ajax&gt; (1)

因为最近工作有些信息需要额外花时间去收集,但是现在有相关的operations每天记录状态,但是没有一个很好的状态收集工具,将状态收集起来,所以很多情况下我们不知道是状态变好了,还是变差.如果使用EXCEL协助记录,会造成很多麻烦,比如sharepoint的文件保存会有些繁琐.便想着用Django 来创建个APP来记录. 使用MYSQL + PYTHON + AJAX 1. 配置数据库 DATABASES = { 'default': { 'ENGINE': 'django.db.backend

[django]django+post+ajax+highcharts使用方法

直接代码展示: view.py文件代码 from django.http import JsonResponse #django ajax部分 def ajax_kchart(request): times = request.POST['shijian'] chnl = request.POST['chnl'] chnl_data = keywork_chart(chnl,times) data_list = [] for j in chnl_data: data_list.append(j)