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
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/212429.html
標籤:其他
