RESTFramework(DRF)进阶篇GenericAPIview-ViewSet类

Posted 运维-大白同学

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RESTFramework(DRF)进阶篇GenericAPIview-ViewSet类相关的知识,希望对你有一定的参考价值。

1.0认识 GenericAPIview类

1.0 定义数据模型
2.0 定义序列化器
3.0 修改settings.py配置文件
4.0 同步数据库
5.0 编写视图
6.0 编写路由
7.0 插入数据
8.0 验证数据

1.1 定义数据模型

1.2 定义序列化器

1.3 修改settings.py配置文件

1.4 同步数据库

python3  manage.py makemigrations  #同步数据
python3  manage.py  migrate    #迁移数据

1.5 编写视图

from django.shortcuts import render
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.status import HTTP_404_NOT_FOUND
from myapp.serializers import UserSerializer
from myapp.models import User

class UserView(APIView):
    def get(self, request):
        #print(request.query_params)
        queryset = User.objects.all() #调用序列化器将queryset转化成json 
        user_ser =UserSerializer(queryset,many=True) #序列化器多条数据指定many=True
        return Response(user_ser.data)
    def post(self, request):
        print(request.data)
        data ='result': 'post'
        return Response(data)
    def put(self, request):
        print(request.data)
        data ='result': 'put'
        return Response(data)
    def delete(self, request):
        print(request.data)
        data ='result': 'delete'
        return Response(data)

1.6 编写路由


1.7 插入数据

1.8 验证(APIView请求方式)

2.0 改写GenericAPIView方法

2.1 get请求获取所有数据



能够成功获取数据,并且看到定义的code和msg

2.2 get请求获取单条数据

配置app路由

新增视图判断

验证

3.0认识 ViewSet

GenericAPIview有一个问题获取所有用户和单个用户数据需要定义两个视图和URL路由,使用ViewSet可以很好解决这个问题,并且实现路由自动映射。
Viewset视图集不再实现get(),post()等方法,而是实现以下请求方法动作:

list():获取所有数据
retrieve(): 获取单个数据
create():创建数据
update():更新数据
destory();删除数据

3.1 改写 路由

from django.urls import path, re_path
from  myapp import views


urlpatterns = [
    re_path('^user/$', views.UserView.as_view('get':'list','post':'create')),#获取所有数据,创建
    re_path('^user/(?P<id>\\d+)/$', views.UserView.as_view('get':'retrieve','put':'update','delete':'destory')),  #获取单条数据,更新,删除/user/id
]

3.2 改写视图

from rest_framework.response import Response
from rest_framework.viewsets import ViewSet
from myapp.serializers import UserSerializer
from myapp.models import User

class UserView(ViewSet):
    def retrieve(self, request, id=None):   #查询单个数据
        obj = User.objects.get(id=id)
        user_ser = UserSerializer(obj)
        res ='code':200,'msg':'成功','data':user_ser.data
        return Response(res)
    def list(self, request):   #查询所有数据
        queryset = User.objects.all()
        user_ser = UserSerializer(queryset, many=True)
        res = 'code': 200, 'msg': '成功', 'data': user_ser.data
        return Response(res)

    def create(self, request):   #创建用户
        user_ser =UserSerializer(data=request.data)
        user_ser.is_valid(raise_exception=True)
        user_ser.save()
        res = 'code':200,'msg':'创建用户成功'
        return Response(res)
    def update(self, request, id=None):  #更新用户
        obj = User.objects.get(id=id)
        user_ser = UserSerializer(instance=obj, data=request.data)
        if user_ser.is_valid():
            user_ser.save()
            res = 'code': 200, 'msg': '更新用户成功'
        else:
            res = 'code': 500, 'msg': '更新用户失败,数据格式不正确'
        return Response(res)
    def destory(self, request, id=None):  #删除用户
        obj = User.objects.get(id=id)
        obj.delete()
        res = 'code': 200, 'msg': '删除用户成功!'
        return Response(res)

3.3 验证



最终实现增删改查所有数据

以上是关于RESTFramework(DRF)进阶篇GenericAPIview-ViewSet类的主要内容,如果未能解决你的问题,请参考以下文章

RESTFramework(DRF)进阶篇GenericAPIview-ViewSet类

RESTFramework(DRF)进阶篇GenericAPIview-ViewSet类

RESTFramework(DRF)框架初探以及认识serializers序列化器的增删改查

RESTFramework(DRF)框架初探以及认识serializers序列化器的增删改查

drf视图

drf初识