一:說明
同一個頁面以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': ''}