28 drf 路由
路由
介绍
from rest_framework.routers import DefaultRouter,SimpleRouter
# defaultRouter是相对复杂路由
'''
[
# 列表路由 .json  /book.json
<URLPattern '^books/$' [name='haha-list']>, 
<URLPattern '^books\.(?P<format>[a-z0-9]+)/?$' [name='haha-list']>, 
# 详情路由 .json  /books/1.json
<URLPattern '^books/(?P<pk>[^/.]+)/$' [name='haha-detail']>, 
<URLPattern '^books/(?P<pk>[^/.]+)\.(?P<format>[a-z0-9]+)/?$' [name='haha-detail']>, 
# 根路由 .json
127.0.0.1:8000   127.0.0.1:8000/.json
<URLPattern '^$' [name='api-root']>, 
<URLPattern '^\.(?P<format>[a-z0-9]+)/?$' [name='api-root']>
]
'''
# SimpleRouter
'''
[
列表视图
<URLPattern '^books/$' [name='haha-list']>,
详情视图
<URLPattern '^books/(?P<pk>[^/.]+)/$' [name='haha-detail']>
]
'''
使用
from rest_framework.routers import DefaultRouter,SimpleRouter
#创建对象
# router = DefaultRouter()
router = SimpleRouter()
#注册
router.register('books',views.BookInfoViewSet,basename='haha')
urlpatterns  += router.urls
# 打印
print(urlpatterns)
注意点:
- 
1, 使用DRF可以自动根据前端需要的类型, 返回对应格式的数据
 - 
2, 请求的时候在请求头中标记, Accept即可
 - 
3, 只有视图集,才能自动生成路由
 
视图集额外动作路由
...
from rest_framework.decorators import action
class BookInfoViewSet(ModelViewSet):
    ...
    @action(methods=['get'],detail=False)#不带参数 路由规则:前缀/方法名/
    def read_book(self,request):
       ...
    # 修改指定书籍
    @action(methods=['put'],detail=True)#带参数 规则: 前缀/{pk}/方法名
    def updata_book_read(self,request,pk):
       ...
                    
                
                
            
        
浙公网安备 33010602011771号