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

时间:2023-03-09 04:13:10
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': [''], 'name': ['中天'], 'name_cn': [''], 'comment': ['']}>
#处理后
{'id': '', 'name': '中天', 'name_cn': '', 'comment': ''}