1.创建模型操作类
from django.db import models
class Teacher(models.Model):
SEX_OPTION = (
(0, "男"),
(1, "女"),
)
name = models.CharField(max_length=20, verbose_name='姓名')
age = models.SmallIntegerField(verbose_name="年龄")
sex = models.SmallIntegerField(choices=SEX_OPTION, verbose_name="性别")
classmate = models.CharField(max_length=15, verbose_name="班级")
dec = models.CharField(max_length=100, verbose_name="介绍")
class Meta:
verbose_name = "老师信息"
verbose_name_plural = verbose_name
def __str__(self):
return self.name
然后进行数据库迁移准备一些数据
2.创建序列化器类
from rest_framework import serializers
# 序列化器基类(有两个)
# serializers.Serializer
# serializers.ModelSerializer
from .models import Teacher
class TeacherModelSerializer(serializers.ModelSerializer):
class Meta:
model = Teacher # 指定模型类
# fields = "__all__" # 返回给客户端全部字段
fields = ["id", "name", "age"] # 返回给客户端指定字段
ModelSerializer与常规的Serializer相同,但提供了:
基于模型类自动生成一系列字段
基于模型类自动为Serializer生成validators,比如unique_together
包含默认的create()和update()的实现
3.编写视图
from rest_framework.viewsets import ModelViewSet
from .models import Teacher
from .serializer import TeacherModelSerializer
class TeacherModelViewSet(ModelViewSet):
queryset = Teacher.objects.all()
serializer_class = TeacherModelSerializer
视图集简介:
"""
视图集
特点:
1,可以将一组相关的操作, 放在一个类中进行完成(比如获取所有和获取单个)
2,不提供get,post方法, 使用retrieve, create方法来替代
3,可以将标准的请求方式(get,post,put,delete), 和mixin中的方法做映射
常见的视图集:
类名称 父类 作用
ViewSet APIView 可以做路由映射
ViewSetMixin
GenericViewSet GenericAPIView 可以做路由映射,可以使用三个属性,三个方法
ViewSetMixin
ModelViewSet GenericAPIView 所有的增删改查功能,可以使用三个属性,三个方法
5个mixin类
ReadOnlyModelViewSet GenericAPIView 获取单个,所有数据,可以使用三个属性,三个方法
RetrieveModelMixin
ListModelMixin
"""
4.定义路由
from django.urls import path
from . import views
urlpatterns = [
]
from rest_framework.routers import SimpleRouter, DefaultRouter
router = DefaultRouter()
router.register("teacher", viewset=views.TeacherModelViewSet, basename="teacher")
urlpatterns += router.urls
print("urlpatterns= ", urlpatterns)
生成的路由分析:
[
# 127.0.0.1:8000
<URLPattern '^teacher/$' [name='teacher-list']>,、
<URLPattern '^teacher\.(?P<format>[a-z0-9]+)/?$' [name='teacher-list']>,
<URLPattern '^teacher/(?P<pk>[^/.]+)/$' [name='teacher-detail']>,
<URLPattern '^teacher/(?P<pk>[^/.]+)\.(?P<format>[a-z0-9]+)/?$' [name='teacher-detail']>,
# 跟路由
<URLPattern '^$' [name='api-root']>,
<URLPattern '^\.(?P<format>[a-z0-9]+)/?$' [name='api-root']>
]
接口地址 请求方式 返回数据 描述
http://127.0.0.1:8000/app2/teacher/ get [{},{},...] 获取所有
http://127.0.0.1:8000/app2/teacher/ post {} 新增
http://127.0.0.1:8000/app2/teacher/id get {} 获取单个
http://127.0.0.1:8000/app2/teacher/id put {} 修改某个
http://127.0.0.1:8000/app2/teacher/id delete 无 删除单个
5.测试启动项目:
http://127.0.0.1:8000/app2/app2/teacher/
get
http://127.0.0.1:8000/app2/app2/teacher/
post
http://127.0.0.1:8000/app2/app2/teacher/id
get
http://127.0.0.1:8000/app2/app2/teacher/id
put
http://127.0.0.1:8000/app2/app2/teacher/id
delete
OK