1.概述
上文我们已经使用视图函数的形式发送请求,这一次,我们使用类视图的方式发送GET、POST、DELETE、PUT请求
2.代码展示
url
from django.contrib import admin
from django.urls import path,include
from . import views
urlpatterns = [
path('students/',views.StudentsView.as_view()),
path('students/<int:pk>/',views.StudentDetailView.as_view())
]
from rest_framework.urlpatterns import format_suffix_patterns
# 可以使用allowed = ['json','html'] 参数指定允许的后缀
urlpatterns = format_suffix_patterns(urlpatterns)
视图函数
from django.shortcuts import render
from django.views.decorators.csrf import csrf_exempt
from rest_app.models import *
from rest_app.app_serializer import StudentSerializer,ClassesSerializer
from django.http import JsonResponse,HttpResponse,Http404
from rest_framework.parsers import JSONParser
from rest_framework.request import Request
from rest_framework.response import Response
from rest_framework import status
from rest_framework.decorators import api_view
from rest_framework.views import APIView
# Create your views here.
'''
新增 post students/
删除 delete students/id/
修改 put students/id/
查询一个 get students/id/
查询所有 get students/
'''
# 完成新增,查询所有
class StudentsView(APIView):
def get(self,request,format=None):
# 查询所有数据
stu_list = Student.objects.all()
# 序列化
serializer = StudentSerializer(stu_list, many=True)
# 将json格式返回客户端
return Response(serializer.data)
def post(self,request):
serializer = StudentSerializer(data=request.data)
# 进行验证
if serializer.is_valid():
# 保存数据到数据库中
serializer.save()
# 返回新保存的数据 状态码 201
return Response(serializer.data, status = status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
class StudentDetailView(APIView):
def get_student(self,pk):
try:
# 根据pk获取Student
student = Student.objects.get(pk=pk)
return student
except Student.DoesNotExist: #无法获取到
raise Http404
def get(self,request,pk,format=None):
student = self.get_student(pk)
# 根据id查询指定的Student
# 序列化——展示数据
serializer = StudentSerializer(student)
# 返回json数据
return Response(serializer.data)
def put(self,request,pk,format=None):
student = self.get_student(pk)
# 根据id修改Student
# 反序列化——获取需要使用的数据时使用
# data_dict = JSONParser().parse(request)
# 将原来的对象 字典数据传入序列化类中
serializer = StudentSerializer(student, data=request.data)
# 进行验证
if serializer.is_valid():
# 更新数据到数据库
serializer.save()
return Response(serializer.data)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def delete(self,request,pk,format=None):
student = self.get_student(pk)
# 根据id删除classes
student.delete()
return Response(status=status.HTTP_204_NO_CONTENT)
3.效果展示