django-rest-framework
類視圖
繼承:主要由三個
from rest_framework import mixins, generics, viewsets, permissions
每個類視圖都必須由apiview,把類視圖解析成視圖函數用,再集成其他的mixins,也有框架自己集成好的,用viewsets
1. mixins
裏面有集成好的各種方法,有:list/retrieve/create/update/destory
也有組合好的
必須和apiview(viewsets.GenericsAPIView)配合使用,兩個都得有
2. generics
裏面主要是封裝了mixins,有幾種簡單的組合,可以方便使用,注意必須和viewsets配合使用
ListAPIView / RetrieveAPIView / CreateAPIView / ListCreateAPIView .....
3. viewsets
裏面頁由封裝的mixins和APIView,如:ModelAPIView把所有的方法(5種)都寫到了裏面,當然還有其他組合,其他兩項都必須和viewsets配合使用
參數
- queryset 是能夠操作的查詢集
permission_classes 是權限組,元組,可以自定義權限類,自定義要繼承自permissions.BasePermission
# request是請求,view是視圖函數,obj是操作的對象 class MyPermission(permissions.BasePermission): def has_object_permission(self, request, view, obj): return obj.user == request.user # 這個類意思是:請求user必須是obj的user才能操作
# 使用方法 permission_classes = (MyPermission,)
- serializer_class = UserInfoSerializer
處理函數的serializer,可以給同一個類視圖中不同方法不同視圖,就是改寫視圖方法,記着把context寫進去,不然圖片url會不全
router 路由註冊
from rest_framework import routers
生成路由
router = routers.SimpleRouter()
註冊視圖
router.register(r’users’, views.UserInfoView)
添加到url
urlpatterns += router.urls
router的坑
類視圖函數繼承as_view函數的時候最好用viewsets.GenericViewSet,否則可能會報錯,不要用generic.GenericApiView