标签:包括 font def orm imp 成功 tps 操作 了解
在 [Python自学] restframework 中,我们实现了publish和book的增删改查(包括单条查询,一共5个视图操作)。
但是如果我们还有很多同样需要实现5种操作的实例种类,那么代码重复量会非常大。如何解决这个问题,restframework已经为我们提供了解决方法。
restframework为我们提供了mixins模块:
from rest_framwork import mixins
mixins模块中为我们提供了5个类:
mixins.ListModelMixin # 获取全量数据(对应get) mixins.CreateModelMixin # 插入数据(对应post) mixins.UpdateModelMixin # 更新数据(对应put) mixins.DestroyModelMixin # 删除数据(对应delete) mixins.RetrieveModelMixin # 获取单条数据(对应get)
from rest_framework import mixins from rest_framework import generics class AuthorView(mixins.ListModelMixin, mixins.CreateModelMixin, generics.GenericAPIView): pass class AuthorDetailView(mixins.RetrieveModelMixin, mixins.UpdateModelMixin, mixins.DestroyModelMixin, generics.GenericAPIView): pass
AuthorView中主要做全量获取和创建一条数据,所以继承ListModelMixin和CreateModelMixin。
GenericAPIView继承自APIView,是使用Mixins的基础。
例如,在AuthorView中,他继承了ListModelMixin类,则相当于自己有了一个叫list的方法(这个list方法就相当于get视图方法),继承了CreateModelMixin类,相当于自己有了一个create的方法(相当于post视图方法),继承了GnericAPIView相当于继承了APIView类。
Authors对应的urls路由条目:
from django.contrib import admin from django.urls import path, re_path from demo import views urlpatterns = [ path(‘admin/‘, admin.site.urls), re_path(‘^publishes/$‘, views.PublishView.as_view(), name="publish"), re_path(‘^publishes/(?P<pk>\d+)/$‘, views.PublishDetailView.as_view(), name="publishdetail"), re_path(‘^books/$‘, views.BookView.as_view(), name="book"), re_path(‘^books/(?P<pk>\d+)/$‘, views.BookDetailView.as_view(), name="bookdetail"), re_path(‘^authors/$‘, views.AuthorView.as_view(), name="author"), re_path(‘^authors/(?P<pk>\d+)/$‘, views.AuthorDetailView.as_view(), name="authordetail"), ]
from rest_framework import mixins from rest_framework import generics from .models import Author # Author序列化类 class AuthorModelSerializers(serializers.ModelSerializer): class Meta: model = Author fields = "__all__" class AuthorView(mixins.ListModelMixin, mixins.CreateModelMixin, generics.GenericAPIView): queryset = Author.objects.all() serializer_class = AuthorModelSerializers # 获取全部authors def get(self, request, *args, **kwargs): return self.list(request, *args, **kwargs) # 插入一条数据 def post(self, request, *args, **kwargs): return self.create(request, *args, **kwargs)
class AuthorDetailView(mixins.RetrieveModelMixin, mixins.UpdateModelMixin, mixins.DestroyModelMixin, generics.GenericAPIView): queryset = Author.objects.all() serializer_class = AuthorModelSerializers # 获取单条author记录 def get(self, request, *args, **kwargs): return self.retrieve(request, *args, **kwargs) # 更新一条记录 def put(self, request, *args, **kwargs): return self.update(request, *args, **kwargs) # 删除一条记录 def delete(self, request, *args, **kwargs): return self.destroy(request, *args, **kwargs)
获取全量数据:
Postman以get请求访问http://127.0.0.1:8000/authors/:
[ { "id": 1, "name": "leo", "age": 32 }, { "id": 2, "name": "alex", "age": 35 }, { "id": 3, "name": "Jone", "age": 23 }, { "id": 4, "name": "Lucy", "age": 30 } ]
插入一条数据:
Postman以post请求访问http://127.0.0.1:8000/authors/,post数据:
{ "name": "李雷", "age": 90 }
成功返回以上数据,再查询全量数据:
[ { "id": 1, "name": "leo", "age": 32 }, { "id": 2, "name": "alex", "age": 35 }, { "id": 3, "name": "Jone", "age": 23 }, { "id": 4, "name": "Lucy", "age": 30 }, { "id": 5, "name": "李雷", "age": 90 } ]
成功插入数据。
获取一条数据:
Postman发送get请求,http://127.0.0.1:8000/authors/4/:
返回数据:
{ "id": 4, "name": "Lucy", "age": 30 }
修改一条数据:
将id为4的author的年龄修改为33,向http://127.0.0.1:8000/authors/4/发送put请求,数据如下:
{ "name": "Lucy", "age": 33 }
成功返回以上数据,再次查询id为4的author的信息:
{ "id": 4, "name": "Lucy", "age": 33 }
年龄修改成功。
删除一条数据:
删除id为4的数据,发送delete请求到http://127.0.0.1:8000/authors/4/。
返回空值。
查看全量数据:
[ { "id": 1, "name": "leo", "age": 32 }, { "id": 2, "name": "alex", "age": 35 }, { "id": 3, "name": "Jone", "age": 23 }, { "id": 5, "name": "李雷", "age": 90 } ]
成功删除id为4的数据。
(>??)?
标签:包括 font def orm imp 成功 tps 操作 了解
原文地址:https://www.cnblogs.com/leokale-zz/p/12234348.html