DRF之路由系統與視圖
阿新 • • 發佈:2018-08-02
.com post 請求 新增 手動 sta date 區分 elf
手動路由編寫
# 路由 from django.conf.urls import url from app01.views import UserListView urlpatterns = [ # GET請求 查詢所有 # POST請求 增加 url(r'^users/$', UserListView.as_view()), url(r'^users\.(?P<format>\w+)/$', UserListView.as_view()), # 附帶.json後綴 # PUT請求 修改 # DELETE請求 刪除 # GET請求 查詢單個數據 url(r'^users/(?P<pk>\d+)/$', UserListView.as_view()), url(r'^users\.(?P<format>\w+)/(?P<pk>\d+)/$', UserListView.as_view()), ] # 視圖 from rest_framework import serializers from .models import UserInfo from rest_framework.response import Response class MySerializer (serializers.ModelSerializer): class Meta: model = UserInfo # 指定model fields = '__all__' # 自動生成所有字段 depth = 2 # 對於外鍵字段,可以顯示 class UserListView(APIView): def get(self,request,*args,**kwargs): print(args) print(kwargs) # 區分查詢 單個 或 所有數據 pk = kwargs.get('pk','') if pk: obj = UserInfo.objects.filter(id=pk).first() ser = MySerializer(instance=obj, many=False) else: obj_list = UserInfo.objects.all() ser = MySerializer(instance=obj_list, many=True) return Response(ser.data) def post(self,request,*args,**kwargs): # 新增 pass def put(self,request,*args,**kwargs): # 更新 pass def delete(self,request,*args,**kwargs): # 刪除 pass
半自動路由與視圖
# 路由 from django.conf.urls import url from django.contrib import admin from app01.views import UserViewSet urlpatterns = [ url(r'^admin/', admin.site.urls), # 以get方式提交,則調用list方法;以post方式提交,則調用create方法 url(r'^test/$', UserViewSet.as_view({'get': 'list', 'post': 'create'})), url(r'^test/(?P<pk>\d+)/$', UserViewSet.as_view( {'get': 'retrieve', 'put': 'update', 'patch': 'partial_update', 'delete': 'destroy'})), ] # 視圖 from rest_framework.viewsets import ModelViewSet from rest_framework import serializers class UserSerializer(serializers.ModelSerializer): class Meta: model = UserInfo fields = "__all__" class UserViewSet(ModelViewSet): queryset = UserInfo.objects.all() serializer_class = UserSerializer
視圖繼承關系圖:
DRF提供了可以直接在頁面進行 新增、修改、刪除 等功能:
全自動路由與視圖
# 路由 from django.conf.urls import url, include from rest_framework import routers router = routers.DefaultRouter() router.register(r'users', UserViewSet) urlpatterns = [ url(r'^', include(router.urls)), ] # 視圖 from rest_framework.viewsets import ModelViewSet from rest_framework import serializers class UserSerializer(serializers.ModelSerializer): class Meta: model = UserInfo fields = "__all__" class UserViewSet(ModelViewSet): queryset = UserInfo.objects.all() serializer_class = UserSerializer
DRF之路由系統與視圖