DRF路由组件分析

DRF路由组件分析

在之前进行drf开发时,对于路由我们一般进行两种配置:

  • 视图继承APIView

    from django.urls import path
    from app01 import views
    
    urlpatterns = [
        path('api/users/', views.UserView.as_view()),  # APIView
    ]
    
  • 视图继承 ViewSetMixin(GenericViewSet、ModelViewSet)

    from django.urls import path, re_path, include
    from app01 import views
    
    urlpatterns = [
        path('api/users/', views.UserView.as_view({"get":"list","post":"create"})),
        path('api/users/<int:pk>/', views.UserView.as_view({"get":"retrieve","put":"update","patch":"partial_update","delete":"destory"})),
    ]
    

    对于这种形式的路由,drf中提供了更简便的方式:

    from rest_framework import routers
    from app01 import views
    
    router = routers.SimpleRouter()				# routers.urls 所有的路由信息
    router.register(r'api/users', views.UserView)
    
    urlpatterns = [
        # 其他URL
        # path('xxxx/', xxxx.as_view()),
    ]
    
    urlpatterns += router.urls
    

    也可以利用include,给URL加前缀:

    from django.urls import path, include
    from rest_framework import routers
    from app01 import views
    
    router = routers.SimpleRouter()
    router.register(r'users', views.UserView)
    
    urlpatterns = [
        path('api/', include((router.urls, 'app_name'), namespace='instance_name')),
        # 其他URL
        # path('forgot-password/', ForgotPasswordFormView.as_view()),
    ]
    

额外的URL

from rest_framework.viewsets import ModelViewSet
from rest_framework.decorators import action


class XXXModelSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.UserInfo
        fields = "__all__"

        
class XXXView(ModelViewSet):
    queryset = models.UserInfo.objects.all()
    serializer_class = XXXModelSerializer
	
    # detail=False: 生成URL时后面不带id
    # @action(detail=False, methods=['get'], url_path="yyy/(?P<xx>\d+)/xxx")
    # def get_password(self, request, xx, pk=None):
    #     print(xx)
    #     return Response("...")

    # @action(detail=True, methods=['get'], url_path="yyy/(?P<xx>\d+)/xxx")
    # def set_password(self, request, xx, pk=None):
    #     print(xx)
    #     return Response("...")

相关推荐

  1. DRF组件分析

    2024-05-04 07:26:03       30 阅读
  2. 组件和非组件区别:

    2024-05-04 07:26:03       33 阅读
  3. Vue学习笔记-缓存组件

    2024-05-04 07:26:03       55 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-04 07:26:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-04 07:26:03       101 阅读
  3. 在Django里面运行非项目文件

    2024-05-04 07:26:03       82 阅读
  4. Python语言-面向对象

    2024-05-04 07:26:03       91 阅读

热门阅读

  1. docker搭建redis集群三主三从

    2024-05-04 07:26:03       31 阅读
  2. 【QT】QStackedWidget一利器,常在项目中的使用

    2024-05-04 07:26:03       33 阅读
  3. AWTK 和 QT 资源占用不完全对比

    2024-05-04 07:26:03       34 阅读
  4. 设计模式-02 设计模式-工厂模式factory

    2024-05-04 07:26:03       29 阅读
  5. 2024牛客五一集训派对day2

    2024-05-04 07:26:03       26 阅读
  6. Matplotlib 绘图可视化全面总结

    2024-05-04 07:26:03       37 阅读
  7. 富格林:细节决定能否安全出金

    2024-05-04 07:26:03       32 阅读