• day22


    如果是form表单 直接在表单里增加 {% csrf_token %} 这个就好了

    方式一:

    个人觉得用这个方便

    添加请求头 就不是data里的值了 
    <script src="https://cdn.bootcss.com/jquery-cookie/1.4.1/jquery.cookie.js"></script>  ##这里走的是cdn 应该导入文件
        $.ajax({
             headers:{"X-CSRFToken":$.cookie('csrftoken')},
             })    
    #实现原理:通过jquery操作cookie拿到key对应的值

    方式二:

                data:{
                    csrfmiddlewaretoken:$('[name="csrfmiddlewaretoken"]').val()
                },

    实现的原理:
                在html的某一个位置 写上 {% csrf_token %} 这样会在页面渲染一个 这样的input标签
                <input type="hidden" name="csrfmiddlewaretoken"
                value="fQLSrDayErQNNzyvxLNa7WcmHKuJtwOxdjUmqOymnLUOkGFJDwGwFRshOjFoamHO">
                通过在data里的设置拿到key-csrfmiddlewaretoken对应的value,key不变,主要就是拿到固定key对应的value这个随机字符串

    方式三:

            $.ajax({
                data:{
                    csrfmiddlewaretoken:$.cookie("csrfmiddlewaretoken")
                },    
            或者:
            <script src="{% static 'js/jquery.cookie.js' %}"></script>
            $.ajax({
            headers:{"X-CSRFToken":$.cookie('csrftoken')},
            })    
    实现原理:
        利用jquery操作cookie拿到key-csrfmiddlewaretoken对应的value

    1.确定事件

    ajax不会闲的没事自己触发执行,需要事件去触发执行呢

    例如:放在button的click事件中
            <button class="ajax1">ajaxsend</button><span class="info"></span>
            <script>
                $('button').click(function () {
                    $.ajax({
                        url:'/sendajax/',
                        type:'get',
                        success:function (data) {
                            $('.info').html(data)
                        }
                    })
                })
            </script>

    2.格式以及必要参数

    $().ajax({
            url:'/sendajax/', #必选参数 路径
            success:function () {} #必选参数 如果成功的话就执行函数  (data)接收的是服务端返回给客户端的数据
            type:'get' or 'post' #默认为get 大小写均可
            data:{                #发送给服务端的数据 自己组建键值对
                "k1":"v1",
                "k2":"v2"    
            } 
        })

    3.ajax的参数

    $().ajax({
            url:'/sendajax/', #必选参数 路径
            success:function () {} #必选参数 如果成功的话就执行函数  (data)接收的是服务端返回给客户端的数据
            type:'get' or 'post' #默认为get 大小写均可
            data:{                #发送给服务端的数据 自己组建键值对 当前ajax请求要携带的数据,是一个json的object对象,ajax方法就会默认地把它编码成某种格式
                "k1":"v1",
                "k2":"v2"    
            } 
        error: function (jqXHR, textStatus, err)
            {
    // jqXHR: jQuery增强的xhr
    // textStatus: 请求完成状态
    // err: 底层通过throw抛出的异常对象,值与错误类型有关 err是错误信息
    console.log(arguments); }, })

     比较重要的一个参数 contentType

        默认值: contentType:"application/x-www-form-urlencoded",     数据格式:?user=alex&pwd=123
        其他方式: contentType:"application/json",                     数据格式:{"user":"alex","pwd":"123"}  字典格式 双引号 
            
        服务端取数据:
        这样取出来的数据并不是元数据,是字典,是经过包装的
        name=request.POST.get('name')
        pwd=request.GET.get('pwd') #{"user":"alex","pwd":"123"}
        
        我们直接取出的数据,经过了Django的处理 处理过程基本是
        服务端识别客户端的编码 "application/x-www-form-urlencoded" 
        通过request.body() 拿到的数据是:?user=alex&pwd=123
        然后Django自己处理数据格式 
        我们通过
        name=request.POST.get('name')
        pwd=request.GET.get('pwd') #{"user":"alex","pwd":"123"}
        拿到的是字典 也就是Django从request.body()里 处理好格式的数据
        ##注意 request.POST/GET.get() 这种取值的方式对应的就是客户端使用"application/x-www-form-urlencoded"这种编码,如果换了,用这种方法可就不一定能取出值来了
        但是request.body()是一定可以的,这里可是元数据哦
        
        如果用 "application/json" 这种方式发送数据 发送的是json字符串
        首先用request.POST/GET.get() 肯定是拿不到数据了
        现在客户端发给服务端的是json字符串,服务端拿到的是json字符串,服务端不认识json数据,需要 
        import json
        obj=request.body() #b’name=yuan&pwd=123'  是个bytes类型
        json.loads(obj) 反序列化
        
        对比一下:
        request.POST   # <QueryDict:{'name':['yuan'],'pwd':'[123]'}>
        request.GET    # <QueryDict:{'name':['yuan'],'pwd':'[123]'}>
        request.body   # b’name=yuan&pwd=123' 是个bytes类型
  • 相关阅读:
    python 最简单的web应用(一)
    adb命令
    python 面向对象(四)--实例属性和类属性
    python 面向对象(三)--继承和多态
    python 面向对象(二)--访问限制
    python 面向对象(一)--类(class)和实例(Instance)
    前端性能优化方法
    myeclipse实现Servlet实例(1) 通过继承servlet接口实现
    myeclipse实现Servlet实例(3) 通过继承HttpServlet接口实现
    马士兵Servlet&Jsp学习
  • 原文地址:https://www.cnblogs.com/jnbb/p/8042403.html
Copyright © 2020-2023  润新知