zoukankan      html  css  js  c++  java
  • DRF的ViewSet和Router

    GenericViewSet

    例如GenericViewSet继承了ViewSetMixin和generics.GenericAPIView,而里面只有一个pass没有任何代码,如果要使用它,比如在前面的Goods商品的views里使用,因为需要get请求所以还是要另外继承一个ListModelMixin,整个views.py就是下面这样(加了自定义分页):

    from rest_framework import mixins
    from rest_framework.pagination import PageNumberPagination
    from rest_framework import viewsets
    
    from .serializers import GoodsSerializer
    from .models import Goods
    
    
    class GoodsPagination(PageNumberPagination):
        """自定义分页,用于商品的分页"""
        # 每页多少条记录
        page_size = 10
        # 可以在url参数中使用'page_size='来指定上面那个page_size的值
        page_size_query_param = 'page_size'
        # 这里指定的是分页时,页面url里表明在哪一页的参数名
        page_query_param = 'p'
        max_page_size = 100
    
    
    class GoodsListViewSet(mixins.ListModelMixin, viewsets.GenericViewSet):
        # 设置排序规则,这样才能在分页时没有报错
        queryset = Goods.objects.get_queryset().order_by("goods_sn")
        serializer_class = GoodsSerializer
        pagination_class = GoodsPagination

    在urls.py里配置:

    from goods.views import GoodsListViewSet
    
    goods_list = GoodsListViewSet.as_view({
        # 在这里配置,GET请求绑定到了list方法上
        'get': 'list',
    })

    然后在urlpatterns里应用这个配置即可:

    path(r'goods/', goods_list, name="goods-list"),

    Router

    Router带来了另一种注册url的方式,在urls.py里:

    from goods.views import GoodsListViewSet
    from rest_framework.routers import DefaultRouter
    
    # 配置goods的url
    router = DefaultRouter()
    router.register(r'goods', GoodsListViewSet)

    然后就不需要在urlpatterns里面再注册这个goods了,不过使用了Router一定要在urlpatterns里注册一下这个router对象:

    path('', include(router.urls)),

    这两个结合起来用就很好用。

  • 相关阅读:
    QT中PRO文件写法的详细介绍,很有用,很重要!
    What is the difference between authorized_key and known_host file for SSH
    SHELL DATE 命令详解
    Sample program to use PC/SC API.
    如何让用户关闭客户端IE时,触发Session_End事件
    Sql Create Function简单例子
    Css2.0实现圆角边框
    运算符重载的一个例子
    HTML获取URL传递的参数
    C#中自定义属性的例子
  • 原文地址:https://www.cnblogs.com/LauZyHou/p/10274549.html
Copyright © 2011-2022 走看看