Django Rest Framework 中的多个模型

django

1个回答

写回答

苏打水2223

2025-09-05 00:20

+ 关注

Django
Django

使用Django Rest Framework(DRF)可以轻松地构建多个模型的Web API。DRF是一个强大的框架,它提供了许多功能和工具,使我们能够快速构建出符合RESTful架构风格的API。在本文中,我们将介绍如何使用DRF构建多个模型的API,并提供一个实际的案例代码。

首先,我们需要安装DjangoDjango Rest Framework。可以使用pip命令来安装它们:

pip install Django

pip install Djangorestframework

安装完成后,我们需要创建一个Django项目,并在项目中创建多个模型。假设我们正在构建一个博客平台,我们需要创建两个模型:PostComment

Python

# models.py

from Django.db import models

class Post(models.Model):

title = models.CharField(max_length=100)

content = models.TextField()

created_at = models.DateTimeField(auto_now_add=True)

class Comment(models.Model):

post = models.ForeignKey(Post, on_delete=models.CASCADE)

author = models.CharField(max_length=50)

content = models.TextField()

created_at = models.DateTimeField(auto_now_add=True)

在上面的代码中,我们创建了两个模型:PostCommentPost模型包含标题、内容和创建时间等字段。Comment模型包含文章、作者、内容和创建时间等字段。

接下来,我们需要创建序列化器(Serializer)来对模型进行序列化和反序列化。序列化器是DRF中的一个重要组件,它负责处理请求和响应的数据转换。

Python

# serializers.py

from rest_framework import serializers

from .models import Post, Comment

class CommentSerializer(serializers.ModelSerializer):

class Meta:

model = Comment

fields = '__all__'

class PostSerializer(serializers.ModelSerializer):

comments = CommentSerializer(many=True, read_only=True)

class Meta:

model = Post

fields = '__all__'

在上面的代码中,我们创建了两个序列化器:PostSerializerCommentSerializerPostSerializer包含了comments字段,它使用了CommentSerializer来序列化Post模型中的评论。

现在,我们需要创建视图(View)来处理API请求。视图是DRF中负责处理请求和返回响应的核心组件。

Python

# views.py

from rest_framework import viewsets

from .models import Post, Comment

from .serializers import PostSerializer, CommentSerializer

class PostViewSet(viewsets.ModelViewSet):

queryset = Post.objects.all()

serializer_class = PostSerializer

class CommentViewSet(viewsets.ModelViewSet):

queryset = Comment.objects.all()

serializer_class = CommentSerializer

在上面的代码中,我们创建了两个视图:PostViewSetCommentViewSet。这些视图继承自DRF提供的ModelViewSet类,并设置了查询集和序列化器。

现在,我们需要配置URL路由来映射API请求到相应的视图。

Python

# urls.py

from Django.urls import include, path

from rest_framework import routers

from .views import PostViewSet, CommentViewSet

router = routers.DefaultRouter()

router.register(r'posts', PostViewSet)

router.register(r'comments', CommentViewSet)

urlpatterns = [

path('', include(router.urls)),

]

在上面的代码中,我们创建了一个默认的路由器,并注册了PostViewSetCommentViewSet。然后将这些路由添加到Django的URL配置中。

案例代码

Python

# models.py

from Django.db import models

class Post(models.Model):

title = models.CharField(max_length=100)

content = models.TextField()

created_at = models.DateTimeField(auto_now_add=True)

class Comment(models.Model):

post = models.ForeignKey(Post, on_delete=models.CASCADE)

author = models.CharField(max_length=50)

content = models.TextField()

created_at = models.DateTimeField(auto_now_add=True)

# serializers.py

from rest_framework import serializers

from .models import Post, Comment

class CommentSerializer(serializers.ModelSerializer):

class Meta:

model = Comment

fields = '__all__'

class PostSerializer(serializers.ModelSerializer):

comments = CommentSerializer(many=True, read_only=True)

class Meta:

model = Post

fields = '__all__'

# views.py

from rest_framework import viewsets

from .models import Post, Comment

from .serializers import PostSerializer, CommentSerializer

class PostViewSet(viewsets.ModelViewSet):

queryset = Post.objects.all()

serializer_class = PostSerializer

class CommentViewSet(viewsets.ModelViewSet):

queryset = Comment.objects.all()

serializer_class = CommentSerializer

# urls.py

from Django.urls import include, path

from rest_framework import routers

from .views import PostViewSet, CommentViewSet

router = routers.DefaultRouter()

router.register(r'posts', PostViewSet)

router.register(r'comments', CommentViewSet)

urlpatterns = [

path('', include(router.urls)),

]

在本文中,我们介绍了如何使用Django Rest Framework构建多个模型的Web API。我们创建了两个模型:PostComment,然后使用序列化器对模型进行序列化和反序列化。接着,我们创建了视图来处理API请求,并配置了URL路由来映射请求到相应的视图。通过这些步骤,我们可以轻松地构建出符合RESTful架构风格的API,并实现多个模型的数据交互。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号