drf 自动生成路由对应关系+路由扩展

自动生成路由对应关系

路由

from rest_framework import routers

router = routers.SimpleRouter()
router.register(r'blog', blogViews.BlogView)
router.register(r'register', commonViews.RegisterView)
urlpatterns = [
    ...
]
urlpatterns += router.urls

from rest_framework import routers

router = routers.SimpleRouter()
router.register(r'blog', blogViews.BlogView)
router.register(r'register', commonViews.RegisterView)
urlpatterns = [
    path('', include((router.urls, 'app_name'), namespace='instance_name')),
]

BlogView,RegisterView为ViewSetMixin视图

image

路由扩展

view

class RegisterView(ModelViewSet):
    """
    post:
    注册
    """
    queryset = models.UserInfo.objects.all()
    serializer_class = RegisterModelSerializer
    pagination_class = PageNumberPagination

    # 重写perform_create
    def perform_create(self, serializer):
        serializer.validated_data.pop("confirm_password")
        serializer.save()

    def perform_update(self, serializer, instance):
        serializer.save()

    from rest_framework.decorators import action
    """
    methods 请求方式
    detail 是否是具体信息 list = false  info = true
    url_path 自定义url地址
    url_name 自定义url name
    """
    # url : 原来基础+get_list/
    @action(methods=['get'], detail=False, url_name=None)
    def get_list(self, request, pk):
        return Response(pk)

    # url : 原来基础+api1/pk/api1/
    @action(methods=['get'], detail=False, url_path="api1/(?P<pk>\d+)/api1", url_name=None)
    def api1(self, request, pk):
        return Response(pk)

    # url : 原来基础/pk/+get_info/
    @action(methods=['get'], detail=True, url_name=None)
    def get_info(self, request, pk):
        return Response(pk)

image

posted @ 2022-10-12 16:39  Sherwin_szw  阅读(30)  评论(0)    收藏  举报