路由
可以通过路由as_view()传参 根据请求方式的不同执行对应不同的方法
在routers模块下 封装了很多关于路由的方法 , 最基础的BaseRouter类,给我提供自定制的接口。
rest_framework也为我们的url进行了优化,我们以前写的url还是有很大的代码重复性,
rest_framework 中的routers模块中DefaultRouter类中提供了方法,这个只能配合modelviewset使用,因为register只能 注册一个视图函数。
from django.conf.urls import url,include from django.contrib import admin from api_demo.views import BookViewSet,PublishViewSet,LoginViewset from rest_framework import routers router=routers.DefaultRouter() #生成router对象 router.register(r'books',BookViewSet) #这一句话就会生成books需要的所有的url urlpatterns = [ url(r'^',include(router.urls)), #引入include url(r'^admin/', admin.site.urls), # url(r'^books/$', BookViewSet.as_view({"get":"list","post":"create"})), # url(r'^books/(?P<pk>d+)/$',BookViewSet.as_view({"get":"retrieve","put":"update","patch":"partial_update",'delete': 'destroy'}),name="books"), ]
这个方法的对于超链接Hylink来说name属性已经变了,这时候,我们在序列化中设置hylink的时候view_name属性应该注意。我们来看一下
^ ^publishes/$ [name='publish-list'] ^ ^publishes.(?P<format>[a-z0-9]+)/?$ [name='publish-list'] ^ ^publishes/(?P<pk>[^/.]+)/$ [name='publish-detail'] ^ ^publishes/(?P<pk>[^/.]+).(?P<format>[a-z0-9]+)/?$ [name='publish-detail']