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")
-