我使用Django 1.9和Django的REST框架3.3DRF - 基本視圖集中的查詢參數驗證
我創建三個新的端點是類似的,但仍有足夠的不同,我想他們是自己的viewsets避免凌亂的代碼。他們不支持模型,所以我直接擴展ViewSet
。所有三個端點之間的一個相似之處是它們需要相同的兩個查詢參數。所以我發現我是這樣做的:
class MyFirstViewset(viewsets.ViewSet):
def list(self, request):
some_param = request.query_params.get('someparam')
if not some_param:
return Response('someparam query parameter is required', status.HTTP_400_BAD_REQUEST)
some_other_param = request.query_params.get('someotherparam')
if not some_other_param:
return Response('someotherparam query parameter is required', status.HTTP_400_BAD_REQUEST)
class MySecondViewset(viewsets.ViewSet):
def list(self, request):
some_param = request.query_params.get('someparam')
if not some_param:
return Response('someparam query parameter is required', status.HTTP_400_BAD_REQUEST)
some_other_param = request.query_params.get('someotherparam')
if not some_other_param:
return Response('someotherparam query parameter is required', status.HTTP_400_BAD_REQUEST)
正如你所看到的......它不是非常乾燥。一個明顯的解決方案是使用基本視圖集進行類似的驗證部分的繼承,問題是我不確定用DRF做這種事情的最佳做法是什麼。我想創建一個受保護的訪問驗證功能並調用它嗎?但是,如果我所做的只是檢查鍵的字典,它甚至不需要在ViewSet的權利?只需讓最後一個類在list()
中進行驗證,那麼在所有子視圖集中調用它也對我來說看起來很奇怪,因爲那時我使用list()
來驗證並且實際上不會返回基類中的任何內容。
任何人都可以告訴我這是一個很好的方法嗎?這種情況的最佳做法是什麼?我谷歌搜索,但找不到任何東西。任何意見,將不勝感激。謝謝!爲什麼類的基類是更好