一:说明
同一个页面以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': ''}