zoukankan      html  css  js  c++  java
  • django-ajax

    #######django与ajax########
    
    一、什么是ajax:ajax英文翻译过来就是异步的JavaScript和xml,即用JavaScript语言与服务器进行异步交互,传输的数据为xml,但是传输
                  的数据也有其他形式,比如json格式数据。
    
    二、它的优势是:1、异步
                 2、局部刷新
    
        异步提交:浏览器(也就是客户端)向服务器提交一个后,无需要等服务端给你响应,你可以继续提交请求
        同步提交:向服务器提交请求,必须要服务端给你响应之后,你才能继续提交请求。
    
    三、基于query的ajax请求,写一个登陆案例(还是再django项目里啊)
    html代码(伪代码):
        <body>
            用户名:<input type="text" id="name"><br>
            密码:<input type="password" id="pwd"><br>
            <button id="btn">登陆</button>
        </body>
        <script>
            $('#btn').click(function () {
                $.ajax({
                    url:'/login/',
                    type:'post',
                    data:{
                        name:$('#name').val(),
                        pwd:$('#pwd').val(),
                    },
                    success:function (data) {
                        alert(data)
                    }
                })
            })
        </script>
    
    views代码:
        def login(request):
            if request.method == 'GET':
                return render(request,'login.html')
            name = request.POST.get('name')
            pwd = request.POST.get('pwd')
            if name == '朱宇' and pwd == '123':
                return HttpResponse('登陆成功')
            return HttpResponse('用户名密码错误')
    
    路由关系:
        url(r'^login/$', views.login),
    
    ##其实我们不用ajax也一样可以写出来,那么向后台提交数据有哪几种方式:
        1、get请求的url也可以   127.0.0.1:8080/login?name=zhuyu&password=123
        2、post请求通过form表单提交数据,因为没有指定编码格式,默认使用urlencoded,也就是这种name=zhuyu&password=123
        3、就是通过ajax进行数据交互
    
    四、基于ajax进行文件上传
    首先写通过form表单进行文件上传吧
    html代码:
        <form action="" method="post" enctype="multipart/form-data">
            文件:<input type="file" name="file"><br>
            <input type="submit" value="提交" >
        </form>
    
    views代码:
        def files(request):
            if request.method == 'GET':
                return render(request, 'files.html')
            file = request.FILES.get('file')
            file_name = file.name
            download = r'D:django练习day78download'
            with open(download + '\' + file_name , 'wb') as f:
                for line in file:
                    f.write(line)
            return HttpResponse('ok')
    
    ## 注意,我们上传文件必须指定编码为formdata,enctype="multipart/form-data"
    ## 那么我们基于ajax去上传文件,是不是也要指定特定的编码
    
    html代码:
        <body>
        文件:<input type="file" id="file"><br>
        <button id="btn" >提交</button>
        </body>
        <script>
            $('#btn').click(function () {
                var formdata = new FormData();
                formdata.append('file',$('#file')[0].files[0]);
                $.ajax({
                    url:'/files/',
                    type:'post',
                    processData:false,
                    contentType:false,
                    data:formdata,
                    success:function (data) {
                        alert(data)
                    }
                })
            })
        </script>
    
    views里代码和上面的一样。
    ## 这里我解释下JavaScript中的几行代码:
        1、基于form表单上传文件,需要指定编码格式,那么ajax一样也是,首先我们先创建一个FormData的一个对象
        2、我们通过append方法,给对象传值append(value1,value2),相当于value1=value2
        3、processData:false,  #告诉jQuery不要去处理发送的数据
           contentType:false,  #告诉jQuery不要去设置Content-Type请求头
        4、processData的值只能是布尔值,因为这时的data的值,是一个对象,所以不需要进行处理了
    
    五、ajax一般用在于json格式
        我直接写script里面的代码
        <script>
            $('#btn').click(function () {
    
                var info = {'user':$('#user').val(),
                            'pwd':$('#pwd').val()}
                info = JSON.stringify(info)   #将一个对象转成成json格式的字符串
                $.ajax({
                    url:'',    //url这里为空的话,默认向该页面发出ajax请求
                    type:'post',    //type值为空的话,默认为get方法
                    contentType:'application/json',      //以json格式传输
                    data:info,
                    success:function (data) {
                            console.log(data)
                        }
                })
            })
        </script>
    
    ####上面就是前端发送json格式数据到后台
    ####那后台服务端也可以向前端发送json数据
    
        def login(request):
            if request.method == 'POST':
                import json
                info_dict = json.loads(str(request.body,encoding='utf-8'))
                # request.body里是二进制格式
                if info_dict.get('user') == '朱宇' and info_dict.get('pwd') == 123:
                    return JsonResponse({'status':1,'msg':'ok'})
                return JsonResponse({'status':2,'msg':'用户名或密码错误'})
    
    ####后台传过来json格式的数据,所以success中data应该就是一个字符串,我们只有将他转换为对象(python中字典)
        success:function (data) {
            data = JSON.parse(data)  // 这时data就是对象了,我们就可以取到它的属性了
        }
    
        # 那么有每一种方法,不让我自己出转换成对象呢?
        dataType:'json'    //这就是在ajax里设置的,它的功能就是上面那段代码
        success:function (data) {
                console.log(typeof data)  //值为object
            }
    
    下面来总结下吧:
        知识点不是很多,你从前台发过来的ajax请求,携带的数据你要知道是哪种类型。
        1、文件的话,就先创建一个FormData对象,以key,value的位置,参传数进去
           在ajax方法里,data对应的值就是这个FormData对象,所以在processData的值应该为false,
           contentType的值也为false(让jquery不设置请求头)
           注意:它文件在后面中request.FILES里面,如果有其他input框所对应的value,它的值在POST中取
        2、没有上传文件,就是form表单的里input的话,就直接传了,contentType默认为urlencoded编码方法
        3、json格式数据,首先是把对象给造出来,并且把数据放里面,然后转换成json格式字符串,
           这里contentType必须为'application/json',这样它的的数据在request.body里,是二进制格式
        4、还有就是,你在前端接收到后台json格式数据,可以在ajax那里写dataType:'json',它会自动转换成对象
  • 相关阅读:
    李开复给中国学生的第二封信:从优秀到卓越
    李开复写给中国学生的一封信:从诚信谈起
    Cocos2D-x培训课程
    CCLabelAtlas创建自定义字体
    cocos2d-x设计模式发掘之五:防御式编程模式
    【转】VS2010中使用AnkhSvn
    cocos2d-x 2.1.4学习笔记01:windows平台搭建cocos2d-x开发环境
    【转】Win7环境下VS2010配置Cocos2d-x-2.1.4最新版本的开发环境(亲测)
    ffmpeg开发中出现的问题(二)
    ffmpeg开发中出现的问题
  • 原文地址:https://www.cnblogs.com/zhuchunyu/p/9985051.html
Copyright © 2011-2022 走看看