更新時(shí)間:2023年01月13日15時(shí)31分 來(lái)源:傳智教育 瀏覽次數(shù):
RedirectView為重定向視圖類,它繼承了View類,具有View類提供的所有功能;此外它定義了一些獨(dú)有的屬性和方法,實(shí)現(xiàn)了重定向功能。對(duì)RedirectView類常用的特有屬性和方法進(jìn)行介紹,具體如下:
(1)屬性
①url:重定向的目標(biāo)URL,字符串形式,若值為None引發(fā)410(Gone)錯(cuò)誤。URL中可包含參數(shù),path()函數(shù)可以字典形式為其傳值。
?、趐attern_name:目標(biāo)URL名稱。
?、踦ermanent:用于設(shè)置重定向是否為永久重定向,默認(rèn)為False,表示不設(shè)置為永久重定向。
?、躴uery_string:用于設(shè)置是否將GET請(qǐng)求中的查詢字符串附加到URL,默認(rèn)為False,表示不將查詢字符串附加到URL,直接丟棄。
(2)方法
RedirectView類的常用方法為get_redirect_url(),該方法用于構(gòu)造重定向的目標(biāo)URL,它的語(yǔ)法格式如下:
get_redirect_url(self, *args, **kwargs)
get_redirect_url()方法默認(rèn)使用類的url屬性設(shè)置的目標(biāo)URL,若URL屬性未設(shè)置,get_redirect_url()方法嘗試根據(jù)pattern_name屬性設(shè)置的URL名稱,以反向解析的方式匹配URL。
下面分別對(duì)本章實(shí)例1的views.py和goods/urls.py文件進(jìn)行修改,基于RedirectView實(shí)現(xiàn)刪除商品的功能。
(1)views.py
在views.py中定義繼承了RedirectView類的視圖類DeleteView,在該類中使用url屬性設(shè)置重定向的目標(biāo)URL、重寫get_rediect_url()方法,在get_redirect_url()方法中刪除用戶選擇的商品,并返回重定向。具體代碼如下:
class DeleteGood(RedirectView): url = '/' permanent = True def get_redirect_url(self, *args, **kwargs): good = get_object_or_404(Goods, id=kwargs['gid']) good.delete() return super().get_redirect_url(*args, **kwargs)
(2)urls.py
在goods應(yīng)用的urls.py文件中修改刪除商品的URL,修改后的代碼如下:
path('delete<int:gid>', DeleteGood.as_view()),
以上代碼需替換goods應(yīng)用下子路由中用于刪除商品的數(shù)據(jù)的路由。
views.py和goods/urls.py修改完成后,重啟項(xiàng)目,訪問(wèn)網(wǎng)頁(yè),若單擊“刪除”能刪除商品,說(shuō)明基于RedirectView類的商城商品功能成功實(shí)現(xiàn)。
北京校區(qū)