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)),
原文地址:https://www.cnblogs.com/king-home/p/11142824.html