Django-rest-framework 接口实现 rest_framework 中有已经定义好的 工具类 mixins generics viewsets

rest_framework.mixins

请求业务 的 5 种实现

​ mixin(混合类):不能单独使用,和其它类搭配起来使用(利用了Python支持多继承)

  • rest_framework.mixins imput 业务的 主要逻辑都在这里
    • CreateModelMixin 创建对象 post 请求
    • ListModelMixin 查询所有的对象 get请求
    • RetrieveModelMixin 查询一个对象 get请求
    • UpdateModelMixin 更改一个对象 put 请求
    • DestroyModelMixin 删除一个请求 delete 请求

rest_framework.generics 实际使用时 需要调用的类

实际操作时根据 相应的需求来查询并继承

​ 定义的类的 视图操作 上面实现了 orm 操作 GenericAPIView

​ 以及 增删改查查的 操作 分类 多种选项 根据实际情况分类继承

rest_framework.viewsets 没有实际的 操作 只是对类进行了 归类的继承 方便使用

  • rest_framework.viewsets`中还封装好了其他的方法 一次性继承

    • from rest_framework.viewsets import ReadOnlyModelViewSet
    • ReadOnlyModelViewSet 封住了 两个查询的 方法 以及视图配置
    • ModelViewSet 封装了 视图配置以及5 个方法 直接继承这一个方法 完成5中操作
  • 使用 ModelViewSet 合成的写法 就要

    • 对路由进行设置 actions={'get':'list' .....} 进行归类

      url(r'authors/$', views.AuthorViewSet.as_view(
          actions={'get': 'list', 'post': 'create'})), 
      # 作者列表
      url(r'authors/(?P<pk>\d+)/$', views.AuthorViewSet.as_view(
              actions={'get': 'retrieve', 'put': 'update', 'delete': 'destroy'})),  
      # 作者详情
      
    • 或者使用 集成的写法 只写一个路由

      from rest_framework.routers import urlpatterns
      
      router = DefaurtRouter()
      
      # 设置路由应对应的 视图
      router.register('authors', views.AuthorViewSet)
      router.register('books', views.BooksViewSet)
      
      # 将生成的 路由添加到 urlpatterns  中  默认路由
      urlpatterns += router.urls
      

简化写法

视图只需要写一个就可以完成相应的操作

视图中 注意在路由中也要做一些修改

分开的写法:

# 导入配置类
from rest_framework.viewsets import GenericViewSet

# 分开写  可以通过继承方式来 实现某种功能  路有中也必须分开写
导入5 个 混合类  配合使用
from rest_framework.mixins import CreateModelMixin, ListModelMixin, UpdateModelMixin, DestroyModelMixin, \
    RetrieveModelMixin

#  有 get post 请求
class BooksList(GenericViewSet, CreateModelMixin, ListModelMixin):
    queryset = models.Books.objects.all()
    serializer_class = BooksModelSerializer

#  get put delete 请求
class BookDetail(GenericViewSet, UpdateModelMixin, DestroyModelMixin, RetrieveModelMixin):
    queryset = models.Books.objects.all()
    serializer_class = BooksModelSerializer

写成一个的 写法

from rest_framework.viewsets import ModelViewSet
# 导入rest_framework已经 封装好的  5 种请求类 以及配置类 
# 直接继承 就可以 使用返回  5 中请求 
class AuthorViewSet(ModelViewSet):
    """
        list()
        create()
        retrieve()
        update()
        destroy()
    """
    queryset = models.Author.objects.all()
    serializer_class = AuthorModelSerializer

路由中

一定要写 actions={}的 参数 字典中的 key 对应小写的 请求方式 value 对应请求 应该执行的 方法

如果 忘了 可以在 rest_framework.viewsets 中 查看 具体 对应的 方法名字

url(r'authors/$', views.AuthorViewSet.as_view(actions={'get': 'list', 'post': 'create'})),  # 作者列表
url(r'authors/(?P<pk>\d+)/$', views.AuthorViewSet.as_view(
        actions={'get': 'retrieve', 'put': 'update', 'delete': 'destroy'})
        ),  # 作者详情

路由也可以 写成一个 由系统自动分配路由 urlpatterns

from rest_framework.routers import urlpatterns

router = DefaurtRouter(
# 设置路由应对应的 视图
router.register('authors', views.AuthorViewSet)
router.register('books', views.BooksViewSet)
将生成的 路由添加到 urlpatterns  中  默认路由
urlpatterns += router.urls

#####此方法 可以在路由中  使用  .json  直接获取json 数据
    http://127.0.0.1:8000/books.json

从地址栏获取 ? 参数

request.query_params.get('category')

generics

使用 封装了 所有的 增删改查查 操作

  • from rest_framework import generics

    • 直接继承内部封装的方法

    • 不必在 路由中 写 actions={'get': 'list', 'post': 'create'} 来定义 具体的 对应操作

    • class ListAPIView(mixins.ListModelMixin,
                        GenericAPIView):
          """
          Concrete view for listing a queryset.
          """
          def get(self, request, *args, **kwargs):
              return self.list(request, *args, **kwargs)
      
    • 类中已经定义好了 方法 调用对应的 Mixin 类中的 方法

    **只需要 定义 **

    •     queryset = models.Course.objects.all()
          serializer_class = CourseModelSerializer
      
posted @ 2019-02-27 22:06  拐弯  阅读(313)  评论(0编辑  收藏  举报