目录
-
JsonResponse
JsonResponse 是HttpResponse的子类,用于向客户端返回json数据。一般用于 ajax请求。它的content-type缺省值为:application/json from django.http import JsonResponse #导包 class JsonResponse(data, encoder=DjangoJSONEncoder, safe=True, json_dumps_params=None, **kwargs) 参数: data:可以是字典,如果safe设置为False,也可以是json序列化对象 encoder:编码格式,缺省是 django.core.serializers.json.DjangoJSONEncoder safe:缺省是True,如果传递字典给data,则报TypeError
-
Json和JsonResponse
系统模块自带的json和JsonResponse from django.http import JsonResponse import json as myJson #返回json数据 def json(req): jsonStr = JsonResponse({'name':'zhangsan','age':18}) jsonStr = myJson.dumps({'name':'zhangsan','age':18}) return HttpResponse(jsonStr) json.dumps给ajax返回数据以后 js代码中需要将json数据使用Json.parse() 进行解 析成js对象 JsonResponse会自动转换为js对象(少了异步Json.parse()的转换)
-
QuerySet转Json
QuerySet转Json def courselist(req): courses = Course.objects.all() #QuerySet data = {'course':list(courses.values())} #查询结果集QuerySet转字典 return JsonResponse(data) #传字典给JsonResponse # 返回数据格式 {'course': [{'cname': '计算机组成原理', 'cid': 1}, {'cname': '英语', 'cid': 2}, {'cname': '数学', 'cidame': 'c语⾔程序设计', 'cid': 4}, {'cname': 'python从⼊⻔到精通', 'cid': 5}]} def courselist(req): courses = Course.objects.all() data = json.dumps(list(courses.values())) #查询结果集QuerySet转 Json字符串,序列化 return JsonResponse(data,safe=False) #safe必须设置为False # 返回的数据格式 [{"cname": "\u8ba1\u7b97\u673a\u7ec4\u6210\u539f\u7406", "cid": 1}, {"cname": "\u82f1\u8bed", "cid": 2}, {"cname": "\u6570\u5b66", "cid": 3}, {"cname": "c\u8bed\u8a00\u7a0b\u5e8f\u8bbe\u8ba1", "cid": 4}, {"cname": "python\u4ece\u5165\u95e8\u5230\u7cbe\u901a", "cid": 5}]
-
模型转Json
class Course(models.Model): cname = models.CharField(max_length=50) cid = models.AutoField(primary_key=True) # 给模型添加to_dict⽅法 def to_dict(self): return dict([(key, self.__dict__[key]) for key in self.__dict__.keys() if key != "_state"]) # 视图函数 def courseshow(req): course = Course.objects.get(pk=1) # 返回的是对象,不是QuerySet return JsonResponse(course.to_dict())