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': ''}
        

猜你喜欢

转载自www.cnblogs.com/lixiang1013/p/9139465.html
今日推荐