如何在Django Rest Framework中实现字典数据传递
Django REST Framework 实现同Django字典传数据到前端的方法
你在原生Django中通过context字典存数据、render传递给模板的逻辑,在DRF里对应为将数据处理为可序列化格式后通过Response返回给前端,前端可以直接读取JSON结构里的对应字段,和模板调用context字段逻辑一致,常见实现方式有两种:
方案1:直接返回自定义字典(适合简单场景)
不需要定义序列化器,直接和原生Django一样构造数据字典,通过DRF的Response返回即可,DRF会自动将字典转换为JSON格式:
# 先导入依赖 from rest_framework.decorators import api_view from rest_framework.response import Response from .models import Book @api_view(['GET']) def book_list_view(request): # 构造数据字典,和原生Django的context写法完全一致 context = { "status": "success", "total": 120, # 模型查询结果可以用values()转成字典格式 "book_list": list(Book.objects.all().values("id", "name", "price", "publish_time")) } # 直接返回字典即可 return Response(context)
方案2:通过序列化器返回(适合复杂/正式项目,官方推荐)
如果有数据校验、复杂字段处理的需求,用DRF自带的序列化器做数据格式化会更规范:
- 第一步:在APP目录下新建
serializers.py定义序列化规则:
from rest_framework import serializers from .models import Book class BookSerializer(serializers.ModelSerializer): class Meta: model = Book # 定义需要返回给前端的字段 fields = ["id", "name", "price", "publish_time"]
- 第二步:在视图中调用序列化器处理数据,返回结果:
from rest_framework.decorators import api_view from rest_framework.response import Response from .models import Book from .serializers import BookSerializer @api_view(['GET']) def book_list_view(request): # 查询数据 books = Book.objects.all() # 序列化数据,many=True表示处理多条数据 serializer = BookSerializer(books, many=True) # 同样可以自定义外层的字典结构 res_data = { "code": 200, "msg": "查询成功", "data": serializer.data } return Response(res_data)
两种方案返回的结果都是标准JSON格式,前端直接读取对应字段即可,和原生Django模板调用context对象的逻辑一致。
内容的提问来源于stack exchange,提问作者Sohanur Rahman Shanto 16209570
相关产品推荐
相关产品推荐

