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序列化器的增删改查