上一篇描述了用原生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可以更方便快捷,代码量也更少。