我有一個非常小的基本站點,有一些視圖。幾乎所有的視圖都會與外部API進行一些交互。使用中間件添加參數以查看django中的函數
在每個視圖中,我實例化了我的API類的一個對象,這顯然不是非常乾燥。我也有一箇中間件,它向請求對象添加了一個或兩個有用的變量(我的中間件在鏈中最後運行)。
我想實例化中間件我的API類,然後將它傳遞給每個視圖作爲參數,即
def my_view(request, my_api_class_instance):
,然後調用從中間件來看,是這樣的:
def process_view(self, request, view_func, view_args, view_kwargs):
my_api = api(some, args, here)
response = view_func(request, my_api, *view_args, **view_kwargs)
return response
這似乎是一個快速簡單的方法來整理一些代碼並減少重複。對此有沒有什麼內在的壞處?
這樣,開發人員最終可能不得不用新的裝飾器來包裝應用程序中的所有視圖,而這並不靈活且通用。 – ozgur
取決於您的用例。如果所有視圖都需要api訪問權限,並且它永遠不會改變,那麼請使用中間件。如果有/你將不需要api訪問的視圖,那麼使用其中一種可能性會更好。它的方式非常靈活,您可以非常輕鬆地控制哪個視圖具有api訪問權限,哪個視圖不具有訪問權限。或者,您可以在api初始化之前檢查每個視圖的權限(其他事項)(當api init是一個昂貴的調用並且您希望最小化這些調用時有用)。 – Bruce
這個問題說:「幾乎所有的視圖都與外部API進行一些交互」,所以中間件應該是首選的方法。 – ozgur