補充:使用django的drf —— 繼承ViewSetMixin的用法和好處
阿新 • • 發佈:2018-12-18
繼承ViewSetMixin,它放在前面(好處,跟某個功能相關的,可以寫在一起),
這樣寫的好處,一個book可以響應兩個get請求
from rest_framework.views import APIView from rest_framework.viewsets import ViewSetMixin from app01 import models from app01 import MySer from rest_framework.response import Response class Book(ViewSetMixin, APIView):View 檢視層def get_all(self, request): # 過濾條件,從GET中取出來 response = {'status': 100, 'msg': '查詢成功'} book_list = models.Book.objects.all() # 這個是序列化資料 ser = MySer.BookSerializers(instance=book_list, many=True) # 如果是校驗資料要傳request.data,也就是從前臺傳過來的資料,不能按位置傳參,需要按照關鍵字傳參data=request.dataresponse['data'] = ser.data return Response(response) def get_one(self, request, pk): response = {'status': 100, 'msg': '查詢成功'} book = models.Book.objects.all().filter(pk=pk).first() if book: ser = MySer.BookSerializers(instance=book, many=False) response['data'] = ser.data else: response['status'] = 101 response['msg'] = '您要查詢的資料不存在' return Response(response)
from app01 import models from rest_framework import serializers class BookSerializers(serializers.ModelSerializer): class Meta: model = models.Book fields = '__all__'MySer-序列化元件
from django.db import models class Book(models.Model): nid = models.AutoField(primary_key=True) name = models.CharField(max_length=32) price = models.CharField(max_length=32) def __str__(self): return self.namemodel 模板層
from django.conf.urls import url,include from django.contrib import admin from app01 import views from rest_framework import routers # # 例項化產生一個物件 # router=routers.DefaultRouter() # router.register('^books',views.Book) urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^books/$', views.Book.as_view({'get':'get_all'})), url(r'^books/(?P<pk>\d+)', views.Book.as_view({'get':'get_one'})), # url('', include(router.urls)),url-路由層
這種方法可以快速寫出5個介面
from rest_framework.viewsets import ModelViewSet -繼承它ModelViewSet -寫一個檢視類,檢視類中定義兩個變數 class Book(ModelViewSet): queryset = models.Book.objects.all() serializer_class = MySer.BookSerializers -路由:(兩條路由): url(r'^publish', views.PublishView.as_view({'get': 'list', 'post': 'create'})), url(r'^publish/(?P<pk>\d+)', views.PublishView.as_view({'get': 'retrieve', 'put': 'update','delete':'destroy'})),
響應器:(一般不需要配置)
-返回用Response
url控制:
三種:
-最原始的
-半自動(必須繼承ViewSetMixin)
-url(r'^books/$', views.Book.as_view({'get':'get_all'})),
-全自動(自動生成路由,必須繼承自ModelViewSet)(不建議用)