zoukankan      html  css  js  c++  java
  • 路由

    路由

    # 1 在url.py中配置
        path('books4/', views.Book4View.as_view()),
        re_path('books4/(?P<pk>d+)', views.Book4DetailView.as_view()),
        
    # 2 一旦视图类,继承了ViewSetMixin,路由
        path('books5/', views.Book5View.as_view(actions={'get': 'list', 'post': 'create'})),
        # 当路径匹配,又是get请求,会执行Book5View的list方法
        re_path('books5/(?P<pk>d+)',
                views.Book5View.as_view(actions={'get': 'retrieve', 'put': 'update', 'delete': 'destroy'})),
    
    # 3 继承自ModelViewSet的路由写法(自动生成路由)
    # 第一步:导入routers模块
    from rest_framework import routers
    
    # 第二步:有两个类,实例化得到对象
    # routers.DefaultRouter  生成的路由更多
    # routers.SimpleRouter
    
    # router = routers.SimpleRouter()
    router = routers.DefaultRouter()
    # 第三步:注册
    # router.register('前缀', '继承自ModelViewSet的视图类', '别名')
    router.register('books', views.BookViewSet,)  # 不要加斜杠了
    
    # 第四步:
    # router.urls # 自动生成的路由,加入到原路由中
    # print(router.urls)
    # urlpatterns += router.urls
    """
    [<URLPattern '^books/$' [name='book-list']>, 
    <URLPattern '^books/(?P<pk>[^/.]+)/$' [name='book-detail']>]
    """

    action的使用

    # action干什么用?为了给继承自ModelViewSet的视图类中定义的函数也添加路由
    # 使用
    from rest_framework.decorators import action  # 装饰器
    
    class BookViewSet(ModelViewSet):
        queryset = Book.objects.all()
        serializer_class = BookSerializer
    
        # methods第一个参数,传一个列表,列表中放请求方式
        # ^books/get_1/$ [name='book-get-1'] 当向这个地址发送get请求,会执行下面的函数
        # detail:布尔类型如果是True
        # detail=True(带pk的)/False(不带pk)
        # ^books/(?P<pk>[^/.]+)/get_1/$ [name='book-get-1']
        @action(methods=['get'], detail=True)
        def get_1(self, request, pk):
            print(pk)  # 1
            book = self.get_queryset()[:2]  # 从0开始截取一条
            ser = self.get_serializer(book, many=True)
            return Response(ser.data)
        
    # 装饰器,放在被装饰的函数上方,method:请求方式,detail:是否带pk
  • 相关阅读:
    092 Reverse Linked List II 反转链表 II
    091 Decode Ways 解码方法
    090 Subsets II 子集 II
    089 Gray Code 格雷编码
    088 Merge Sorted Array 合并两个有序数组
    bzoj1218: [HNOI2003]激光炸弹
    bzoj1293: [SCOI2009]生日礼物
    bzoj3438: 小M的作物
    bzoj2565: 最长双回文串
    bzoj3172: [Tjoi2013]单词
  • 原文地址:https://www.cnblogs.com/ZhZhang12138/p/14875847.html
Copyright © 2011-2022 走看看