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)
path('users', views.UserView.as_view(), name="user-list")
path('users/(?P<pk>\d+$)', views.UserView.as_view(), name="user-detail")