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):
      ...

 

posted @ 2021-11-04 14:00  彡心如止水彡  阅读(69)  评论(0)    收藏  举报