47)django-以put和delete方式提交数据

Posted 狼来的日子里!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了47)django-以put和delete方式提交数据相关的知识,希望对你有一定的参考价值。

一:说明

  同一个页面以ajax实现增删改查,对应方法post,delete,put,get,

  其中delete和put方式提交的数据在request.body中需要序列化处理。

二:示例

#模板提交数据
    function host_group_modify(thr) {
    //更新数据

    $.ajax({
        url: "{% url "hostgroup" %}",
        type: "put",
        headers: {"X-CSRFtoken": csrftoken},
        data: $("#form_host_group_edit").serialize(),
        dataType: "json",
        success: function (thr) {
            if (thr.status) {
                location.reload();
            } else {
                //第二次转换JSON
                var errors = JSON.parse(thr.errors);
                //显示alert
                $(".alert").removeClass("hide");
                var text = ""
                for (i in errors) {
                    text += errors[i][0].message + ";";
                }
                $(".show_error").text(text)
            }
        }
    })

#views中处理


    def put(self,request):
        """修改主机组"""
        data=request_body_serialze(request)

        hostgroup_obj=models.HostGroups.objects.filter(id=data.get("id")).first()
        hostgroup_form_obj=forms.HostGroupFrom(data,initial=hostgroup_obj)
        if hostgroup_form_obj.is_valid():
            models.HostGroups.objects.filter(id=data.get("id")).update(**data)
        else:
            self.ret["status"] = False
            self.ret["errors"] = hostgroup_form_obj.errors.as_json()

        return HttpResponse(json.dumps(self.ret))


#quertdict转成普通字典
    # _*_ coding:utf-8 _*_
    __author__ = "lixiang"
    from django.http.request import QueryDict
    def request_body_serialze(request):
        #对request.body做QuertDict编码转换处理
        #如果不做数据处理:格式b‘id=49&name=%E4%B8%AD&name_cn=&comment=‘
        #页面中提交的中文“中”,变成%E4%B8%AD
        querydict=QueryDict(request.body.decode("utf-8"),encoding="utf-8")
        response_dict={}
        try:
            for key,val in querydict.items():
    
                response_dict[key]=val
        except:
            pass
        return response_dict

    #处理结果

    #处理前
    <QueryDict: {id: [49], name: [中天], name_cn: [‘‘], comment: [‘‘]}>
    #处理后
    {id: 49, name: 中天, name_cn: ‘‘, comment: ‘‘}
        

 

以上是关于47)django-以put和delete方式提交数据的主要内容,如果未能解决你的问题,请参考以下文章

thinkphp3.2 请求怎么发送 put

HTTP提交方式之PUT详细介绍及POST和PUT的区别

使用Ajax (put delete ) django原生CBV 出现csrf token解决办法

get、post、put、delete、head 请求方式的区别

springboot接收delete或者put方法体参数

Django需要的知识点