普通cbv視圖形式的路由:
創(chuàng)新互聯(lián)建站專注于靖江網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供靖江營銷型網(wǎng)站建設(shè),靖江網(wǎng)站制作、靖江網(wǎng)頁設(shè)計(jì)、靖江網(wǎng)站官網(wǎng)定制、微信平臺(tái)小程序開發(fā)服務(wù),打造靖江網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供靖江網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
path('books4/', views.Book4View.as_view()),
re_path('books4/(?P\d+)', views.Book4DetailView.as_view())
繼承了ViewSetMixin及其子類的視圖路由:
path('books5/', views.Book5View.as_view(actions={'get':'list','post':'create'})), #當(dāng)路徑匹配,又是get請(qǐng)求,會(huì)執(zhí)行Book5View的list方法
re_path('books5/(?P\d+)', views.Book5View.as_view(actions={'get':'retrieve','put':'update','delete':'destroy'})),
繼承自視圖類,ViewSetMixin及其子類的路由寫法(自動(dòng)生成路由):
# 第一步:導(dǎo)入routers模塊
from rest_framework import routers
# 第二步:有兩個(gè)類,實(shí)例化得到對(duì)象
# routers.DefaultRouter 生成的路由更多,一般用第二種就行
# routers.SimpleRouter
router=routers.DefaultRouter()
# 第三步:注冊(cè)
# router.register('路由前綴','繼承自ModelViewSet視圖類','別名')
router.register('books',views.BookViewSet) # 不要加斜杠了
# 第四步
# router.urls # 自動(dòng)生成的路由,加入到原路由中
# print(router.urls)
# urlpatterns+=router.urls
導(dǎo)入:from rest_framework.decorators import action
# action干什么用?為了給繼承自ModelViewSet的視圖類中定義的函數(shù)也添加路由
# 使用
class BookViewSet(ModelViewSet):
queryset =Book.objects.all()
serializer_class = BookSerializer
# methods第一個(gè)參數(shù),傳一個(gè)列表,列表中放請(qǐng)求方式,
# ^books/get_1/$ [name='book-get-1'] 當(dāng)向這個(gè)地址發(fā)送get請(qǐng)求,會(huì)執(zhí)行下面的函數(shù)
# detail:布爾類型 如果是True
#^books/(?P[^/.]+)/get_1/$ [name='book-get-1']
@action(methods=['GET','POST'],detail=True)
def get_1(self,request,pk):
print(pk)
book=self.get_queryset()[:2] # 從0開始截取一條
ser=self.get_serializer(book,many=True)
return Response(ser.data)
# 裝飾器,放在被裝飾的函數(shù)上方,method:請(qǐng)求方式,detail:是否帶pk
# action里的其他參數(shù):
url_path: 控制生成的/user/后的路徑是什么,如果不寫,默認(rèn)以方法名命名 /user/login/,一般跟函數(shù)名同名即可
url_name:別名,用于反向解析