更新時間:2023年01月13日15時31分 來源:傳智教育 瀏覽次數:
RedirectView為重定向視圖類,它繼承了View類,具有View類提供的所有功能;此外它定義了一些獨有的屬性和方法,實現了重定向功能。對RedirectView類常用的特有屬性和方法進行介紹,具體如下:
(1)屬性
?、賣rl:重定向的目標URL,字符串形式,若值為None引發410(Gone)錯誤。URL中可包含參數,path()函數可以字典形式為其傳值。
?、趐attern_name:目標URL名稱。
?、踦ermanent:用于設置重定向是否為永久重定向,默認為False,表示不設置為永久重定向。
?、躴uery_string:用于設置是否將GET請求中的查詢字符串附加到URL,默認為False,表示不將查詢字符串附加到URL,直接丟棄。
(2)方法
RedirectView類的常用方法為get_redirect_url(),該方法用于構造重定向的目標URL,它的語法格式如下:
get_redirect_url(self, *args, **kwargs)
get_redirect_url()方法默認使用類的url屬性設置的目標URL,若URL屬性未設置,get_redirect_url()方法嘗試根據pattern_name屬性設置的URL名稱,以反向解析的方式匹配URL。
下面分別對本章實例1的views.py和goods/urls.py文件進行修改,基于RedirectView實現刪除商品的功能。
(1)views.py
在views.py中定義繼承了RedirectView類的視圖類DeleteView,在該類中使用url屬性設置重定向的目標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應用的urls.py文件中修改刪除商品的URL,修改后的代碼如下:
path('delete<int:gid>', DeleteGood.as_view()),
以上代碼需替換goods應用下子路由中用于刪除商品的數據的路由。
views.py和goods/urls.py修改完成后,重啟項目,訪問網頁,若單擊“刪除”能刪除商品,說明基于RedirectView類的商城商品功能成功實現。