Django教程笔记:五、post get ajax异步操作

我们可以用form方式提交表单,不过我一般喜欢用jquery的方式来操作。主要有两种方式。

get方式

get方式不需要预设并且传递csrf标签。
js代码部分:

$("#buy-button").click(function(){
            var productId=$(this).attr("product_id");
            var url =$(this).attr("product_url");
            //$.post("")
            var post_data ={"product_id":productId};
            $.get("/addbuy/",post_data,function(datas){
                alert(datas);
            })
            location.href=url;
        });

后台django的urls.py映射部分:
这里写图片描述
views.py文件部分:

def addbuy(req, *call_args):
    '''
        function:add the buy click number
        author:liushuchun
    '''
    product_id = req.GET.get("product_id")
    if product_id is not None:
        logger.info("the add product_id: %s" % product_id)
        product = Product.objects.get(id=str(product_id))
        product.buy_num = product.buy_num + 1
        product.save()
        return HttpResponse("success", mimetype="javascript/json")

POST方式

post提交方式与get方式存在略微的区别,因为post是修改添加操作,涉及到数据的读写,而get更多只是读取,明显post的权限要大的多,所以安全方面限制也要更多,提供CSRFtoken是为了防止跨域攻击,因为现在很容易用第三方工具构造出post以及get请求,js稍有一些区别:

  //获取cookie代码
function getCookie(name) {
        var cookieValue = null;
        if (document.cookie && document.cookie != '') {
            var cookies = document.cookie.split(';');
            for (var i = 0; i < cookies.length; i++) {
                var cookie = jQuery.trim(cookies[i]);
                // Does this cookie string begin with the name we want?
                if (cookie.substring(0, name.length + 1) == (name + '=')) {
                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                    break;
                }
            }
        }
        return cookieValue;
    }


    $.ajaxSetup({
      beforeSend: function(xhr, settings){ 

          xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'));              //request头需要添加csrftoken,告诉服务器,我是个好yin哪,我是正常访问者
      }
    });



    function addProduct(){
        var name=$("#pro-name").val();
        var img=$("#up-img").val();

        var postdata={
            "name":name,
            "big_photo_url":img,

        };
        //alert(content);

        jQuery.post('/cms/addpro/',postdata,function(data){
           alert("上传成功");
        });
    }

其中后台views.py中代码如下:

def addpro(req):
    '''
         添加商品
    '''
    if 'POST' == req.method:
        data = req.POST      //获取POST中的数据

当然urls.py中类似get中也需要添加映射。
还有在post所在页面中,需要添加: {% csrf_token %},该句会添加对应的csrf token.
并且,后台views.py中需要添加装饰器:
这里写图片描述
这块其实差不多这些,基本上我希望把经常要用到的东西囊括进来,当然还有一些其他控制安全的部分,这里不再赘述。

评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值