用rest_framework视图集ModelViewSet快速实现学生信息的增删改查

        上一篇描述了用原生django实现student的增删改查,接下来我们来看下用rest_framework框架如何快速实现。

1.安装rest_framework&注册

        执行命令安装rest_framework:

pip install djangorestframework

         在drftest项目下settings.py文件中注册rest_framework,如下所示。

INSTALLED_APPS = [
    'rest_framework',
]

 2.创建app&注册

        执行命令创建app“stu_drf”:

django-admin startapp stu_drf

         在drftest项目下settings.py文件中注册stu_drf,如下所示。

INSTALLED_APPS = [
    'stu_drf',
]

 3.创建序列化器:

        在app“stu_drf”下新建serializers.py文件,用来存储模型的序列化和反序列化文件,代码如下所示。这里的model用的是上一篇中app"stu_django"中的models文件。

# 创建序列化器类,回头会在视图中被调用
from rest_framework import serializers
from stu_django.models import Student


class StudentModelSerializer(serializers.ModelSerializer):

    class Meta:
        model = Student
        fields = "__all__"   #序列化所有字段
        # fields = ["id", "name", "age"]  #序列化指定字段

4.创建视图:

        在app“stu_drf”下views.py文件中编写对应的视图信息,如下所示。

from django.shortcuts import render

# Create your views here.

from rest_framework.viewsets import ModelViewSet
from stu_django.models import Student
from .serializers import StudentModelSerializer


class StudentModelViewSet(ModelViewSet):
    queryset = Student.objects.all()
    serializer_class = StudentModelSerializer

        queryset 属性定义了视图集用于获取模型实例的查询集。当执行诸如列表或检索操作时,Django REST framework 会从这个查询集中获取数据。

        serializer_class 属性则定义了视图集用于序列化和反序列化模型实例的序列化器类。序列化器负责将复杂的模型实例或查询集转换为简单的 Python 数据类型,这样它们就可以被转换成 JSON、XML 或其他内容类型。

        在 ModelViewSet 中,queryset 和 serializer_class 的关系是隐含的。当执行一个操作时(例如 GET 请求获取模型列表),ModelViewSet 会自动使用 queryset 来获取数据,并使用 serializer_class 来序列化这些数据。此时不需要显式地将 queryset 的值传入 serializer_class,因为序列化器是独立配置的,它知道如何与模型实例交互,通常是通过在序列化器类中定义字段,这些字段与模型字段相对应。

        在序列化过程中,Django REST framework 会自动迭代 queryset 中的每个对象,并使用 serializer_class 的实例来转换每个对象。序列化器会使用其定义的字段来提取模型实例的相关数据,并创建一个包含这些数据的字典或类似结构。

         需要注意的是queryset不能任意命名,固定写法。

5.配置路由

定义子路由

        在app“stu_drf”下新建urls.py文件,配置子路由信息如下:

from rest_framework.routers import DefaultRouter
from . import views

router = DefaultRouter()
router.register("students2", views.StudentModelViewSet, basename="students2"),

# 路由列表
urlpatterns = [

] + router.urls

 定义项目路由

        在项目drftest下的urls.py文件中配置项目路由,如下所示:


from django.urls import path, include

urlpatterns = [
    path('api/', include("students.urls")),
]

6.启动项目查看效果

        执行命令启动项目:

python manage.py runserver

        项目启动之后,可以根据不同的路由地址显示不同的功能,如:http://127.0.0.1:8000/api/students2/,可以显示所有学生信息,也可以通过post来创建学生信息。

        如果到具体的学生id,可以对学生的个人信息进行查询、更新和删除,如下所示。

         实现同样的功能,相比较原生的django,使用rest_framework可以更方便快捷,代码量也更少。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值