drf——数据库用户信息查询接口

1.models.py-->执行数据迁移命令django

ps:模型层中能够加其余的,只要不是Field的字类,都不会看成字段去处理app

from django.db import models

class Student(models.Model):
    name = models.CharField(max_length=32)
    sex = models.SmallIntegerField(choices=((1, ''), (2, ''), (3, '未知')), default=1)
    # hobby=models.CharField(choices=[('1','篮球'),('2','足球')])
    age = models.IntegerField()

2.serializer.py 视图类函数

from rest_framework import serializers
from app01.models import Student

class StudentSerializer(serializers.ModelSerializer):#Meta方法
    class Meta:
        model = Student
        fields='__all__'
            

3.settings.pyurl

INSTALLED_APPS = [
    ...
    'app01',
    'rest_framework'
]

4.urls.pyspa

from django.contrib import admin
from django.urls import path
from app01 import views

from rest_framework.routers import SimpleRouter
router=SimpleRouter()
router.register('students',views.StudentView)
urlpatterns = [
    path('admin/', admin.site.urls),
    # path('students/', views.StudentView.as_view()),
    # 若是视图函数继承了ViewSetMixin或者它的字类,路由方式必须以下
    # path('students/', views.StudentView.as_view({'get':'get'})),

    # 继承GenericViewSet, ListModelMixin,用此路由
    # path('students/', views.StudentView.as_view({'get':'list'})),
]
urlpatterns+=router.urls

5.views.py视图类rest

from django.shortcuts import render

# 显示全部学生的接口
from app01.models import Student
from app01.serializer import StudentSerializer
from rest_framework.views import APIView
from rest_framework.generics import GenericAPIView, ListAPIView
from rest_framework.mixins import ListModelMixin
from rest_framework.viewsets import ViewSetMixin, ViewSet, GenericViewSet
from rest_framework.response import Response

## 方式一
# class StudentView(GenericAPIView, ListModelMixin):
#     queryset = Student.objects.all()
#     serializer_class = StudentSerializer
#
#     def get(self, request, *args, **kwargs):
#         return self.list(request, *args, **kwargs)


# 方式二
# class StudentView(ListAPIView):
#     queryset = Student.objects.all()
#     serializer_class = StudentSerializer

# 方式三
# # class StudentView(ViewSetMixin, APIView):
# class StudentView(ViewSet): # 跟上行彻底同样
#     def get(self, request, *args, **kwargs):
#         student_list = Student.objects.all()
#         ser = StudentSerializer(student_list, many=True)
#
#         return Response(ser.data)


# 方式四
# class StudentView(ViewSetMixin, GenericAPIView):
# class StudentView(GenericViewSet): # 跟上行彻底同样
#     queryset = Student.objects.all()
#     serializer_class = StudentSerializer
#     def get(self,request, *args, **kwargs):
#         obj_list=self.get_queryset()
#         ser=self.get_serializer(obj_list,many=True)
#         return Response(ser.data)


# 方式5
# class StudentView(GenericViewSet,ListModelMixin): 
#     queryset = Student.objects.all()
#     serializer_class = StudentSerializer
#     def get(self,request, *args, **kwargs):
#         return self.list(request, *args, **kwargs)


# 方式6
# class StudentView(GenericViewSet, ListAPIView):  
#     queryset = Student.objects.all()
#     serializer_class = StudentSerializer


# 方式7
# class StudentView(GenericViewSet, ListModelMixin):  
#     queryset = Student.objects.all()
#     serializer_class = StudentSerializer
# 没有get方法,那就把路由配置中get方法变成list,若是要用本身配的路由,那就要写get方法,详看方式8


# 方式8
# class StudentView(GenericViewSet, ListModelMixin):
#     queryset = Student.objects.all()
#     serializer_class = StudentSerializer
#     def get(self,request, *args, **kwargs):
#         return self.list(request, *args, **kwargs)

# 方式9 可自动生成路由
# class StudentView(GenericViewSet, ListAPIView):
# class StudentView(ViewSetMixin, ListAPIView):
#     queryset = Student.objects.all()
#     serializer_class = StudentSerializer


## 最后经常使用方案,自动生成路由

# 方式10 :查询全部学生和新增一个学生 (这里记得新增时候serializer视图类中不能有字段重写的 get_字段名_display 方法,否则会报错)
from rest_framework.generics import CreateAPIView
# class StudentView(ViewSetMixin, ListAPIView,CreateAPIView):
#     queryset = Student.objects.all()
#     serializer_class = StudentSerializer