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


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

    ps:模型层中可以加其他的,只要不是Field的字类,都不会当作字段去处理

    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.py

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

    4.urls.py

    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视图类

    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
  • 相关阅读:
    [bbk5153]第15集 Chapter 06 Working with Composite Data Types(Collection)
    [bbk5128]第12集 Chapter 06 Working with Composite Data Types 014998(Record)
    [bbk4998]第11集 Chapter 06 Working with Composite Data Types 004998(Record)
    [bbk4979]第06集 Chapter 04 Interacting with Oracle Database Server:SQL Statements in PL/SQL Programs(01)
    PHP与MYSQL事务处理
    Selenium封装
    pytest 失败重跑截图
    python 编码规范起源:PEP8 编码规范中文版
    pytest setup和teardown初始化
    谷歌浏览器linux,windows下载
  • 原文地址:https://www.cnblogs.com/guojieying/p/13958849.html
Copyright © 2020-2023  润新知