django-rest-framework檢視層的使用(二)
上一章節我們講了
serializers
層的各種寫法,本章介紹view
層的寫法
一、使用APIView
的寫法見上一章節
二、使用mixins
和generics
書寫檢視層
- 1、
serializers
保持用GoodsSerializersModel
2、書寫檢視層
from rest_framework import status, mixins, generics class GoodsListViewModelTwo(mixins.ListModelMixin, generics.GenericAPIView): """ queryset就是這樣寫的 serializer_class就是這樣寫的 """
3、
url
配置保持不變
三、使用ListAPIView
來寫
- 1、
serializers
保持用GoodsSerializersModel
2、書寫檢視層
class GoodsListViewModelTwo(generics.ListAPIView)
- 3、
url
配置保持不變
四、分頁的配置
1、在
setting.py
中配置一頁顯示多少條資料(別的都保持不變)# 配置分頁顯示 REST_FRAMEWORK = { 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination', 'PAGE_SIZE': 10 }
五、使用viewsets
1、檢視層的書寫
from rest_framework import status, mixins, generics, viewsets class GoodListViewSet(mixins.ListModelMixin, viewsets.GenericViewSet): queryset = Goods.objects.all() serializer_class = GoodsSerializersModel
2、
url.py
的配置goods_list = GoodListViewSet.as_view({ 'get': 'list', # 'post': 'create' }) urlpatterns = [ url(r'^goods3/$', goods_list), ]
六、viewsets
和router
結合使用
- 1、檢視不變
2、配置
url
變化from rest_framework.routers import DefaultRouter router = DefaultRouter() # 註冊一個url地址 router.register(r'goods3', GoodListViewSet) urlpatterns = [ url(r'^', include(router.urls)), url(r'^xadmin/', xadmin.site.urls), url(r'^api-auth/', include('rest_framework.urls')), url(r'docs/', include_docs_urls(title='介面測試學習')) ]
七、上面分頁是在settings.py
檔案中配置的,是會影響整個專案全部的檢視,如果僅僅是在一個檢視中使用分頁可以考慮在檢視中自己定義
- 1、註釋配置檔案中的分頁
2、在檢視中寫一個類用於分頁配置
from rest_framework.pagination import PageNumberPagination class UserPagination(PageNumberPagination): """ 自己定義一個使用者分頁的類 """ page_size = 5 # 每頁顯示多少條數 page_size_query_param = 'page_size' page_query_param = "page" max_page_size = 100 class UserViewSet(viewsets.ModelViewSet): """ 關於使用者的 """ queryset = UserModel.objects.all() serializer_class = UserSerializer # 使用分頁 pagination_class = UserPagination
八、關於使用viewsets.ModelViewSet
的操作
1、檢視原始碼這個類繼承了的類
class ModelViewSet(mixins.CreateModelMixin, mixins.RetrieveModelMixin, mixins.UpdateModelMixin, mixins.DestroyModelMixin, mixins.ListModelMixin, GenericViewSet): """ A viewset that provides default `create()`, `retrieve()`, `update()`, `partial_update()`, `destroy()` and `list()` actions. """ pass
2、使用後我們檢視中直接使用就可以(預設是支援
get
和post)class BlogViewSet(viewsets.ModelViewSet): """ 關於部落格的 """ queryset = Blog.objects.all() serializer_class = BlogSerialzer
3、如果需要修改或者刪除資料可以重寫
class BookViewSet(viewsets.ModelViewSet): queryset = Book.objects.all() serializer_class = BookSerializer # 查詢全部資料 def get(self, request, *args, **kwargs): return self.list(request, args, kwargs) # 新增資料 def post(self, request, *args, **kwargs): return self.create(request, *args, **kwargs) # 修改資料 def patch(self, request, *args, **kwargs): return self.update(request, *args, **kwargs) # 刪除資料 def delete(self, request, *args, **kwargs): return self.destroy(request, *args, **kwargs)
3、如果僅僅是需要
get
功能可以繼承class BookViewSet(mixins.ListModelMixin, viewsets.GenericViewSe): pass
九、關於個人總結
- 1、第八點中我們在
views.py
中使用了viewsets.ModelViewSet
,雖然簡單好用,但是在開發中往往會有壁壘,比如我僅僅是要get
請求… - 2、個人建議使用
mixins.CreateModelMixin
等一起來使用 - 3、如果是
get
請求可以繼承mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet
- 4、如果是
post
提交可以是mixins.CreateModelMixin, viewsets.GenericViewSet
- 5、如果需要修改資料是
mixins.UpdateModelMixin,viewsets.GenericViewSet
- 6、如果是刪除資料是
mixins.DestroyModelMixin,viewsets.GenericViewSet
7、比如
get
請求,檢視原始碼,我們可以重寫retrieve
這個方法class AuthorViewSet(mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet): queryset = Author.objects.all() serializer_class = AuthorSerializer def list(self, request, *args, **kwargs): // 獲取引數 print(self.request.query_params['name']) queryset = self.filter_queryset(self.get_queryset().filter(author=self.request.query_params['name'])) page = self.paginate_queryset(queryset) if page is not None: serializer = self.get_serializer(page, many=True) return self.get_paginated_response(serializer.data) serializer = self.get_serializer(queryset, many=True) return Response(serializer.data)
8、
mixins.ListModelMixin
是獲取列表的- 9、
mixins.RetrieveModelMixin
可以獲取詳情
相關推薦
django-rest-framework檢視層的使用(二)
上一章節我們講了serializers層的各種寫法,本章介紹view層的寫法 一、使用APIView的寫法見上一章節 二、使用mixins和generics書寫檢視層 1、ser
Django Rest Framework 檢視和路由
一、DRF的檢視 (一)APIView APIView是REST framework提供的所有檢視的基類,繼承自Django的View父類。 APIView與View的不同之處在於: 傳入到檢視方法中的是REST framework的Request物件,而不是Django的HttpRequese
檢視元件,路由元件 Django Rest Framework 檢視和路由
檢視元件 -- 第一次封裝 -- GenericAPIView(APIView): queryset = None serializer_class = None
學習筆記-Python-Django REST Framework-檢視
- 檢視 - DRF的檢視從處理任務,處理流程等跟Django基本一致 - 此檢視基本是Django檢視的擴充套件 - Request - 把請求解析成一個request例項 - 屬於DRF的,跟Django的HttpRequest不太一樣
Django Rest Framework源碼剖析(二)-----權限
www. 基於 framework suffix 生效 ted AI try exce 一、簡介 在上一篇博客中已經介紹了django rest framework 對於認證的源碼流程,以及實現過程,當用戶經過認證之後下一步就是涉及到權限的問題。比如訂單的業務只
Django REST framework+Vue 打造生鮮電商項目(筆記二)
開始 allow 動作 false 做到 category gef eric ocs (轉自https://www.cnblogs.com/derek1184405959/p/8768059.html)(有修改) 接下來開始引入django resfulframework,
Django rest framework 權限操作(源碼分析二)
prop 源碼 display rtc body app ffi 代碼 tin 知識回顧 這一篇是基於上一篇寫的,上一篇謝了認證的具體流程,看懂了上一篇這一篇才能看懂, 當用戶訪問是 首先執行dispatch函數,當執行當第二部時: #2.處理版本信息
Django rest framework 許可權操作(原始碼分析二)
知識回顧 這一篇是基於上一篇寫的,上一篇謝了認證的具體流程,看懂了上一篇這一篇才能看懂, 當用戶訪問是 首先執行dispatch函式,當執行當第二部時: #2.處理版本資訊 處理認證資訊 處理許可權資訊 對使用者的訪問頻率進行限制 self
django rest framework 之 檢視
在之前的django rest framework其他元件中,在檢視函式中繼承類都是rest_framework.view.APIView,這個APIView是繼承的django中的View並且做了封裝和方法重寫的。 那麼在django rest framework中,還有有沒有提供其他的類能夠繼承? 一、
django rest framework框架中的檢視都可以繼承哪些類?
#class View(object): #class APIView(View): 封裝了view,並且重新封裝了request,初始化了各種元件 #class GenericAPIView(views.APIView): #1.增加了一些屬性和方法,如get_queryset,get_seria
django rest framework 解析器元件 介面設計,檢視元件 (1)
一.解析器元件 -解析器元件是用來解析使用者請求資料的(application/json), content-type 將客戶端發來的json資料進行解析 -必須適應APIView -request.data觸發 二.序列化元件 2.1.django 自帶元件serializer 2.1.1 fr
django rest framework 解析器元件 介面設計,檢視元件 (2)
1. 使用檢視元件進行介面優化 1.1 使用檢視元件的mixin進行介面邏輯優化 - 匯入mixin from rest_framework.mixinx import ( ListModelMix, CreateModelMixin,
Django REST Framework學習-分頁,通用檢視,自定義RelatedField
使用通用檢視+分頁+自定義RelatedField url:cardusers/pk/ 傳入模型Card的pk,獲取當前Card的所有User中username和頭像avatar,User是avatar的外來鍵 1. 過載ListAPIView,加入分頁 class
Django REST framework教程二: 請求和響應
教程索引目錄 Django REST framework的系列教程 對於需要通篇瞭解的同學,可以點選教程索引目錄。 從現在開始,我們要開始,真正接觸到REST framework的核心部分了。當然,我們需要先認識一些重要的基本元素。 請求物件(R
DRF(Django REST framework)Mixin中的檢視的五個擴充套件類
這五個擴充套件類需要搭配GenericAPIView父類,因為五個擴充套件類的實現需要呼叫GenericAPIView提供的序列化器與資料庫查詢的方法 1)ListModelMixin 列表檢視擴充套件類,提供list(request, *args, **k
Django rest framework 常用外來鍵命令 (加入、刪除、檢視所有、檢視除了自己以外的所有、摘除分離物件間外來鍵關係)
依次介紹:加入、刪除、檢視所有、檢視除了自己以外的所有、摘除分離物件間外來鍵關係 model class MyUser(AbstractUser): team=models.ForeignKey('myteam.Team',related_name=
Django REST framework教程三: 基於類的檢視
教程索引目錄 Django REST framework的系列教程 對於需要通篇瞭解的同學,可以點選教程索引目錄。 其實,與其使用基於方法(function based)的檢視,我們更加傾向使用基於類(class based)的檢視。接下來,你將看到這
DRF Django REST framework 之 解析器(二)
引入 Django Rest framework幫助我們實現了處理application/json協議請求的資料,如果不使用DRF,直接從 request.body 裡面拿到原始的客戶端請求的位元組資料,經過 decode ,然後 json 反序列化
DRF Django REST framework 之 檢視元件(四)
引言 在我們有幾十上百的檢視類,都有get,post等方法,在功能類似時,會導致大量的重複程式碼出現,顯然還有很多可以優化的地方。這也就有了檢視元件,它的功能非常強大,能很好的優化介面邏輯。 檢視元件 使用檢視元件的mixin優化介面邏輯 匯入 mixins 定義序列化類 定義檢視類
Django REST framework 的快速入門教程
ret turn ads 使用 blog 所有 定義 想去 cti CRM-API項目搭建 序列器(Serializers) 首先,我們來定義一些序列器。我們來創建一個新的模塊(module)叫做 crm/rest_searializer.py ,這是我們用來描述數據是如何