APIView 的使用
-
導入 APIView
from rest_framework.view import APIView
-
自定義類,繼承APIView,並提供和請求相關的方法
class UserView(APIView): def get(self, request, *args, **kwargs): """ 查看所有的用戶 :param request: :param args: :param kwargs: :return: """ serilaizer = None if "pk" in kwargs: queryset = User.objects.filter(pk=kwargs.get("pk")).first() serilaizer = UserSerializer(queryset, context={"request": request}) else: queryset = User.objects.all() # 序列化 用戶信息 serilaizer = UserSerializer(queryset, many=True, context={"request": request}) return Response(serilaizer.data, status=status.HTTP_200_OK) def post(self, request, *args, **kwargs): """ 新增用戶 :param request: :param args: :param kwargs: :return: """ serialzier = UserSerializer(data=request.data) # 校驗數據 if serialzier.is_valid(): serialzier.save() return Response(serialzier.data, status=status.HTTP_201_CREATED) return Response(serialzier.errors, status.HTTP_400_BAD_REQUEST) def put(self, request, pk, *args, **kwargs): # 1、根據主鍵、查詢用戶信息 instance = User.objects.filter(pk=pk).first() # 2、接收頁面參數 serializer = UserSerializer(instance=instance, data=request.data, context={"request": request}) # 3、校驗頁面參數 if serializer.is_valid(): # 4、更新數據 serializer.save() return Response(serializer.data) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) def delete(self, request, pk , *args, **kwargs): User.objects.filter(pk=pk).delete() return Response(status=status.HTTP_204_NO_CONTENT)
-
定義路由
urls.py
path('users', views.UserView.as_view(), name="user-list") path('users/(?P<pk>\d+$)', views.UserView.as_view(), name="user-detail")
-