• DRF——路由控制器


    一、自定义路由(原始方式)

    1. 路由层

    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^publish/$', views.PublishView.as_view()),
        url(r'^publish/(?P<pk>d+)', views.PublishDetailView.as_view()),
    
    ]
    
    • 注意点:注意路由的写法,一定注意加上$结尾

    2. 序列化生成器

    class PublishSerializer(serializers.ModelSerializer):
        class Meta:
            model = models.Publish
            fields = "__all__"
    

    3. 视图层

    # 所有对象 
    class PublishView(APIView):
        def get(self, request):
            publish_list = models.Publish.objects.all()
            publish_ser = PublishSerializer(instance=publish_list, many=True)
            return Response(publish_ser.data)
    
    # 单个对象
    class PublishDetailView(APIView):
    
        def get(self, request, pk):
            publish_obj = models.Publish.objects.filter(pk=pk).first()
            publish_ser = PublishSerializer(publish_obj, many=False)
            return Response(publish_ser.data)
    
    

    二、继承ModelViewSet(半自动)

    1. 路由层:

    url(r'^publish/$', views.PublishView.as_view({'get':'list','post':'create'})),
    url(r'^publish/(?P<pk>d+)$', views.PublishView.as_view({'get':'retrieve','delete':'destroy','put':'update'})),

    2. 视图层:

    from rest_framework.viewsets import ModelViewSet
    
    class PublishView(ModelViewSet):
        queryset = models.Publish.objects.all()
        serializer_class = PublishSerializer
    

    三、自动生成路由

    1. 路由层

    from rest_framework.routers import DefaultRouter, SimpleRouter
    
    # 自动生成四条路由
    router = DefaultRouter()
    # 自动生成两条路由
    # router = SimpleRouter()
    

    # 需要传两个参数,第一个参数就是匹配的路径,第二个参数,是视图类
    router.register('publish', views.PublishView)

    urlpatterns = [
        url(r'^admin/', admin.site.urls),

        url(r'', include(router.urls))

    ]

    四条路由

    两条路由:

    2. 视图层

    from rest_framework.viewsets import ModelViewSet
    
    class PublishView(ModelViewSet):
        queryset = models.Publish.objects.all()
        serializer_class = PublishSerializer
    

    总结:

    -url控制
        -基本路由写法:咱们一直写的
        -第二种写法(必须继承只要继承了ViewSetMixin):
            # url(r'^publish/$', views.PublishView.as_view({'get':'list','post':'create'})),
            # url(r'^publish.(?P<format>w+)$', views.PublishView.as_view({'get':'list','post':'create'})),
            # url(r'^publish/(?P<pk>d+)$', views.PublishView.as_view({'get':'retrieve','delete':'destroy','put':'update'})),
        -第三种(自动生成路由,必须继承ModelViewSet):
            -SimpleRouter 自动生成两条路由
                from rest_framework.routers import SimpleRouter,DefaultRouter
                router=SimpleRouter()
                router.register('publish',views.PublishView)
                、、、、
                url(r'', include(router.urls)),
            -DefaultRouter自动生成四条路由
                from rest_framework.routers import SimpleRouter,DefaultRouter
                router=DefaultRouter()
                router.register('publish',views.PublishView)
                、、、、
                url(r'', include(router.urls)),
    
  • 相关阅读:
    codeforces 189A
    hdu 2085
    hdu 2083
    cf 1237 C2. Balanced Removals (Harder)
    cf 1244 D. Paint the Tree
    cf 1241 E. Paint the Tree(DP)
    cf 1241 D. Sequence Sorting(思维)
    cf1228 D Complete Tripartite(哈希)
    Windows10 与 WSL(Ubuntu)的文件互访
    Ubuntu下运行python文件
  • 原文地址:https://www.cnblogs.com/king-home/p/11142824.html
Copyright © 2020-2023  润新知