一、自定义路由(原始方式)
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)),