当前位置: 首页 > article >正文

Django设计响应数据结构

        在Django中设计响应数据结构通常涉及创建API端点,这些端点返回JSON或其他格式的数据。为了设计高效和易于维护的响应数据结构,需要考虑数据的组织方式、字段命名、嵌套结构以及分页和过滤等功能。

一、定义模型(Models)

首先,定义你的数据模型。这些模型将映射到数据库中的表。

from django.db import models  
  
class User(models.Model):  
    username = models.CharField(max_length=150, unique=True)  
    email = models.EmailField(unique=True)  
    # 其他字段...  
  
class Post(models.Model):  
    title = models.CharField(max_length=200)  
    content = models.TextField()  
    author = models.ForeignKey(User, related_name='posts', on_delete=models.CASCADE)  
    # 其他字段...

二、创建序列化器(Serializers)

序列化器用于将模型实例转换为Python数据类型(通常是字典),然后这些数据类型可以轻松地渲染为JSON

from rest_framework import serializers  
from .models import User, Post  
  
class UserSerializer(serializers.ModelSerializer):  
    posts = serializers.SerializerMethodField()  
  
    class Meta:  
        model = User  
        fields = ['id', 'username', 'email', 'posts']  
  
    def get_posts(self, obj):  
        posts = obj.posts.all()  
        return PostSerializer(posts, many=True).data  
  
class PostSerializer(serializers.ModelSerializer):  
    class Meta:  
        model = Post  
        fields = ['id', 'title', 'content', 'author']

三、创建视图(Views)

使用视图集可以简化视图层的代码,因为视图集提供了标准的CRUD操作。

from rest_framework import viewsets  
from .models import User, Post  
from .serializers import UserSerializer, PostSerializer  
  
class UserViewSet(viewsets.ModelViewSet):  
    queryset = User.objects.all()  
    serializer_class = UserSerializer  
  
class PostViewSet(viewsets.ModelViewSet):  
    queryset = Post.objects.all()  
    serializer_class = PostSerializer

四、设置路由(Routing)

使用DRF的路由系统来定义API的URL结构。

from django.urls import path, include  
from rest_framework.routers import DefaultRouter  
from .views import UserViewSet, PostViewSet  
  
router = DefaultRouter()  
router.register(r'users', UserViewSet)  
router.register(r'posts', PostViewSet)  
  
urlpatterns = [  
    path('', include(router.urls)),  
]

为了提高效率也可以考虑设置分页和过滤...


http://www.kler.cn/a/384539.html

相关文章:

  • 【测试】【Debug】vscode中同一个测试用例出现重复
  • 药品进销存表格制作 佳易王药店药品入库出库台账库存管理系统操作教程
  • 网络编程——TCP通信练习
  • Go nil空值或不存在的引用
  • 全文检索ElasticSearch到底是什么?
  • 数据库->事务
  • web前端
  • navicat pg库安装mysql fdw 外表扩展
  • Call For Speaker! |2025中国国际音频产业大会(GAS)演讲嘉宾征集令启动!
  • 后端Node学习项目-项目基础搭建
  • linux下linuxdeployqt打包过程
  • Xserver v1.4.2发布,支持自动重载 nginx 配置
  • Golang--协程和管道
  • 飞腾平台Arm ComputeLibrary编译安装指南
  • canal1.1.7使用canal-adapter进行mysql同步数据
  • springboot 传统应用程序,适配云原生改造
  • SSH僵尸主机挖矿木马预警
  • 群控系统服务端开发模式-应用开发-腾讯云上传工厂及七牛云上传工厂开发
  • 从Apache Atlas到Aloudata BIG,数据血缘解析有何改变?
  • redis时间优化
  • Redisson实现RedLock分布式锁同步
  • git提交冲突的原因及解决方案
  • 如何搭建 ELK【elasticsearch+logstash+kibana】日志分析系统
  • ctfshow-web入门-反序列化(web260-web264)
  • uniapp+vue基于微信小程序的健康饮食推荐系统 907m6
  • Linux系统的文件系统和日志和管理