首页 > Web开发 > 详细

Django与Ajax

时间:2019-09-24 01:01:23      阅读:123      评论:0      收藏:0      [点我收藏+]

一、AJAX简介

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

AJAX 并不是一种新的编程语言,而仅仅是一种新的技术,它可以创建更好、更快且交互性更强的 web 应用程序。

AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。(这一特点给用户的感受是在不知不觉中完成请求和响应过程)

AJAX 不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行。

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

AJAX常见应用情景

搜索引擎根据用户输入的关键字,自动提示检索关键字。

还有一个很重要的应用场景就是注册时候的用户名的查重。

其实这里就使用了AJAX技术!当文件框发生了输入变化时,使用AJAX技术向服务器发送一个请求,然后服务器会把查询到的结果响应给浏览器,最后再把后端返回的结果展示出来

  • 整个过程中页面没有刷新,只是刷新页面中的局部位置而已!
  • 当请求发出后,浏览器还可以进行其他操作,无需等待服务器的响应!

技术分享图片

当输入用户名后,把光标移动到其他表单项上时,浏览器会使用AJAX技术向服务器发出请求,

服务器会查询名为Bevis-x的用户是否存在,

最终服务器返回true表示名为Bevis-x的用户已经存在了,

浏览器在得到结果后显示用户名已被注册!

  • 整个过程中页面没有刷新,只是局部刷新了;
  • 在请求发出后,浏览器不用等待服务器响应结果就可以进行其他操作;

AJAX的优缺点

优点:

  • AJAX使用JavaScript技术向服务器发送异步请求;
  • AJAX请求无须刷新整个页面;
  • 因为服务器响应内容不再是整个页面,而是页面中的部分内容,所以AJAX性能高; 

关键点:异步提交  局部刷新

AJAX的请求方式

主要有两种:GET POST

常见的朝后端发请求

a标签href属性   GET请求

浏览器窗口输入url     GET请求

form表单    GET/POST请求

ajax    GET/POST请求

例子:
页面上有三个input框
在前两个input框中输入数字
点击按钮 发送ajax请求 不刷新页面的情况下
第三个框中自动算出两数之和

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

AJAX 并不是一种新的编程语言,而仅仅是一种新的技术,它可以创建更好、更快且交互性更强的 web 应用程序。

AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。(这一特点给用户的感受是在不知不觉中完成请求和响应过程)

AJAX 不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行。

同步交互:客户端发出一个请求后,需要等待服务器响应结束后,才能发出第二个请求;
异步交互:客户端发出一个请求后,无需等待服务器响应结束,就可以发出第二个请求。
AJAX常见应用情景
搜索引擎根据用户输入的关键字,自动提示检索关键字。

还有一个很重要的应用场景就是注册时候的用户名的查重。

其实这里就使用了AJAX技术!当文件框发生了输入变化时,使用AJAX技术向服务器发送一个请求,然后服务器会把查询到的结果响应给浏览器,最后再把后端返回的结果展示出来。

整个过程中页面没有刷新,只是刷新页面中的局部位置而已!
当请求发出后,浏览器还可以进行其他操作,无需等待服务器的响应!


当输入用户名后,把光标移动到其他表单项上时,浏览器会使用AJAX技术向服务器发出请求,

服务器会查询名为Bevis-x的用户是否存在,

最终服务器返回true表示名为Bevis-x的用户已经存在了,

浏览器在得到结果后显示“用户名已被注册!”。

整个过程中页面没有刷新,只是局部刷新了;
在请求发出后,浏览器不用等待服务器响应结果就可以进行其他操作;
AJAX的优缺点
优点:
AJAX使用JavaScript技术向服务器发送异步请求;
AJAX请求无须刷新整个页面;
因为服务器响应内容不再是整个页面,而是页面中的部分内容,所以AJAX性能高; 
关键点:异步提交  局部刷新

AJAX的请求方式
主要有两种:GET POST

常见的朝后端发请求

a标签href属性   GET请求

浏览器窗口输入url     GET请求

form表单    GET/POST请求

ajax    GET/POST请求
例子:
页面上有三个input框
在前两个input框中输入数字
点击按钮 发送ajax请求 不刷新页面的情况下
第三个框中自动算出两数之和

 

views
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
</head>
<body>
<input type="text" id="i1">+<input type="text" id="i2">=<input type="text" id="i3">
<button id="b1">求和</button>

<!--绑定点击事件-->
<script>
    $(#b1).on(click,function () {
        $.ajax({
            //点击按钮,超后端发POST请求
            url:‘‘,  // 控制发送给谁 不写就是朝当前地址提交
            type:post,  // 发送方式是post请求
            data:{i1:$(#i1).val(),i2:$(#i2).val()},  // 发送的数据
            success:function (data) {  // data形参用来接收异步提交的结果
                // 将后端计算好的结果 通过DOM操作 渲染到第三个input矿中
                        $(#i3).val(data)

                    }
        })

    })



</script>
</body>
</html>
index.html
技术分享图片
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
</head>
<body>
<input type="text" id="i1">+<input type="text" id="i2">=<input type="text" id="i3">
<button id="b1">求和</button>

<!--绑定点击事件-->
<script>
    $(#b1).on(click,function () {
        $.ajax({
            //点击按钮,超后端发POST请求
            url:‘‘,  // 控制发送给谁 不写就是朝当前地址提交
            type:post,  // 发送方式是post请求
            data:{i1:$(#i1).val(),i2:$(#i2).val()},  // 发送的数据
            success:function (data) {  // data形参用来接收异步提交的结果
                // 将后端计算好的结果 通过DOM操作 渲染到第三个input矿中
                        $(#i3).val(data)

                    }
        })

    })



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

 

技术分享图片

 

 

 

 

二、contentType前后端传输数据编码格式

前后端传输数据编码格式

1.urlencoded

2.formdata

3.json

form表单

默认使用的编码格式是urlencoded

技术分享图片

 

 

 数据格式:name=jason&pwd=123
django后端针对urlencoded编码格式的数据会自动解析并放到request.POST中供用户获取

 

formdata 传文件

技术分享图片

 

 

 django后端针对只要是符合urlencoded编码格式的数据(name=jason&pwd=123)都会自动解析并放到request.POST中供用户获取
如果是文件 只要你指定的编码是formdata 就会自动解析并放到request.FILES中
前后端传输数据的时候 一定要保证数据格式和你的编码格式是一致的

 

ajax提交数据

ajax默认数据提交方式也是urlencoded

django后端针对json格式的数据 并不会自动解析放到request.POST或者request.FILES里面

它并不会解析json格式数据 而是将它原封不动的放在request.body中了
传json格式
<
script> $(#b1).on(click,function () { $.ajax({ //点击按钮,超后端发POST请求 url:‘‘, // 控制发送给谁 不写就是朝当前地址提交 type:post, // 发送方式是post请求 data:JSON.stringify({username:jason,password:123}), // 发送的数据 contentType:application/json, // 告诉后端你这次的数据是json格式 success:function (data) { // data形参用来接收异步提交的结果 // 将后端计算好的结果 通过DOM操作 渲染到第三个input矿中 $(#i3).val(data) } }) }) </script>

 

ajax传输文件

ajax传输文件 建议使用内置对象formdata

formdata既可以传普通的键值对 也可以传文件

传文件固定语法

如何获取文件标签所存储的文件对象?  固定语法

1.先用jQery查找到存储文件的input标签
2.将jQuery对象转成原生js对象
3.利用原生js对象的方法 .files[0]获取到标签内部存储的文件对象
4.一定要指定两个参数都为false

 

技术分享图片

 

 技术分享图片

技术分享图片
<script>
$(#b1).on(click,function () {
        // ajax传输文件 建议使用内置对象formdata
        var formData = new FormData();  // 既可以传普通的键值对 也可以传文件
        // 添加普通键值
        formData.append(username,jason);
        formData.append(password,123);
        // 传文件
        // 如何获取文件标签所存储的文件对象?  固定语法
        // 1.先用jQery查找到存储文件的input标签
        // 2.将jQuery对象转成原生js对象
        // 3.利用原生js对象的方法 .files[0]获取到标签内部存储的文件对象
        formData.append(my_file,$(#d1)[0].files[0]);
        $.ajax({
            url:‘‘,  // 控制发送给谁 不写就是朝当前地址提交
            type:post,  // 发送方式是post请求
            data:formData, // 发送的数据

            // ajax发送文件需要指定两个额外的参数
            processData:false,  // 告诉前端不要处理数据
            contentType:false,  // 不适用任何编码  因为formdata对象自身自带编码 django后端也能够识别formdata对象

            success:function (data) {  // data形参用来接收异步提交的结果
                alert(data)
                // 将后端计算好的结果 通过DOM操作 渲染到第三个input矿中
                $(#i3).val(data)
            }

        })
    //{)
</script>
ajax传输文件

 

三、序列化组件

Django内置的serializers

前端想拿到由ORM得到的数据库里面的一个个用户对象,

我的后端想直接将实例化出来的数据对象直接发送给客户端,

那么这个时候,就可以用Django给我们提供的序列化方式

 

在线JSON校验格式化工具:(http://www.bejson.com

def ser(request):
    #拿到用户表里面的所有的用户对象
    user_list=models.User.objects.all()
    #导入内置序列化模块
    from django.core import serializers
    #调用该模块下的方法,第一个参数是你想以什么样的方式序列化你的数据
    ret=serializers.serialize(json,user_list)
    return HttpResponse(ret)
from django.core import serializers  # django自带的一个小型的序列化工具
        def reg(request):
            user_list = models.User.objects.all()
            res = serializers.serialize(json,user_list)
            return render(request,index.html,locals())

    #结果能将所有的数据都组织成一个符合json的一个大的字典

Django与Ajax

原文:https://www.cnblogs.com/xiongying4/p/11574821.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!