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号