[django]JsonResponse序列化数据

本文详细介绍了在Web开发中如何使用JSONResponse来返回JSON格式的数据。包括如何序列化字典及列表,以及如何设置safe参数等内容。
def home(request):
    data = {
        'name': 'maotai',
        'age': 22
    }
    import json
    return HttpResponse(json.dumps(data), content_type='application/json', status=400)


def home2(request):
    data = {'name': 'maotai', 'age': 23}
    return JsonResponse(data, safe=True)

JsonResponse(继承HttpResponse)基于JsonResponse做了一层封装,返回数据浏览器直接json mime显示.
1,data.dumps
2,加上了content_type

3,JsonResponse支持序列化列表,字典.

def home2(request):
    arr = [1,2,3]
    return JsonResponse(data, safe=False) # safe值默认是true, 如果是列表,则safe置为False, 如果是字典为true.

转载于:https://www.cnblogs.com/iiiiiher/p/8922517.html

### Django 框架中序列化和反序列化的使用方法 #### JSON 和 XML 的序列化与反序列化 在 Web 开发过程中,为了方便数据在网络上的传输和存储,通常会采用序列化技术。Django 提供了内置的支持来简化这一过程,在此框架下能够轻松地将 Python 对象转换为 JSON 或者 XML 格式的字符串表示形式,并能反过来解析这些格式的数据回对象实例。 对于 JSON 序列化而言,可以通过 `serializers` 模块下的 `serialize()` 方法完成模型查询集到 JSON 字符串的转变;而要执行反向操作即将 JSON 数据映射至新的数据库记录,则可利用同属该模块内的 `deserialize()` 函数[^1]。 ```python from django.core import serializers # 假设有如下 QuerySet 查询结果 objects_list objects_list = MyModel.objects.all() # 将其转为 JSON 格式并保存在一个变量里 json_data = serializers.serialize('json', objects_list) print(json_data) ``` 当涉及到更复杂的场景比如 AJAX 请求时,前端发送过来的数据往往是以 JSON 形式存在的字典结构。此时就需要先接收请求体中的原始信息再做进一步处理——即所谓的“反序列化”。这一步骤同样依赖于上述提到过的 `django.core.serializers.deserialize()` 工具函数来进行验证和转化工作[^2]。 ```python import json from django.http import JsonResponse from django.views.decorators.csrf import csrf_exempt from myapp.models import MyModel @csrf_exempt def save_model(request): if request.method == 'POST': body_unicode = request.body.decode('utf-8') body_data = json.loads(body_unicode) # 进行反序列化操作 deserialized_objects = list(serializers.deserialize("json", json.dumps([body_data]))) obj = deserialized_objects[0].object try: obj.save() return JsonResponse({"status": "success"}, status=200) except Exception as e: return JsonResponse({"error": str(e)}, status=400) ``` 另外值得注意的是,在实际项目开发当中可能会遇到一些特殊字段(例如日期时间类型),这时需要确保所提供的输入值符合预期格式才能顺利完成整个流程[^3]。 #### 创建自定义序列器类 除了直接调用默认的方法之外,还可以基于 REST framework 构建更加灵活高效的解决方案。通过继承 BaseSerializer 类来自定义自己的 Serializer 子类,从而获得更好的控制权以及更高的性能表现: ```python from rest_framework import serializers class CustomModelSerializer(serializers.Serializer): name = serializers.CharField(max_length=100, required=True) pub_date = serializers.DateField(required=False) serializer = CustomModelSerializer(data={'name': 'itcast'}) if serializer.is_valid(): validated_data = serializer.validated_data print(validated_data.get('name')) else: errors = serializer.errors print(errors) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值