159.Django-RESTframe基于类视图包装器与格式后缀的使用

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.效果展示

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想成为数据分析师的开发工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值