簡體   English   中英

Django(v2 +)和Django REST Framework:如何處理“路徑”?

[英]Django (v2+) and Django REST Framework: what to do with “path” interferes?

我是Django REST Framework的新手...但是正在通過教程,快速入門,網絡和擺弄弄清楚了它。 但是,我沒有找到以下問題的明確解決方案。

假設有人希望編寫一個需要整數的api。

您可以嘗試在網址格式中使用Django的path

urlpatterns = [
    ...
    path('my_api/<int:integer_argument>', views.my_api, name='my_api'),
    ...
]

在他們看來

@api_view(['GET'])
def my_api(request, integer_argument):
     # do stuff
     return JsonResponse({'int': integer_argument})

注意:在這里,我使用JsonResponse只是為了保持簡單,但是很可能那個/那些參數進入類/模型和序列化器中,並由Response(serializer.data)返回。

因此,現在如果他們要測試一個調用此api的應用程序(處於開發模式) http://localhost:8000/my_api/1他們應該得到{'int':1}

但是,如果他們要調用http://localhost:8000/my_api/ehttp://localhost:8000/my_api/e得到調試頁面或Bad Request (400)作為html

讓我們假設制作api的人確實有適當的錯誤處理來驗證參數(在這種情況下, integer_argument是整數)。

現在, path越來越麻煩了,而對於Django網站,這可能是理想的結果。

RESTful和django REST框架認可的處理這種情況的方式是什么?

path轉換(例如<int:arg_name> )使url conf可讀,因此是一個不錯的功能。

我是否應該在基於函數的視圖中移動類型以鍵入注釋? 並使用通用彈頭?

注意:在這種情況下,我希望對my_api/<something>每個請求都返回統一的響應(錯誤或其他)。

您的問題不夠明確。 您聲明:

讓我們假設制作api的人確實有適當的錯誤處理來驗證參數(在這種情況下,integer_argument是整數)。

是的,這將是Django處理的事情...。這就是為什么您得到調試頁\\錯誤請求的原因,因為它不匹配。

在您的API中,您正在定義與該格式完全匹配的端點。 如果一個uri不匹配,則這是預期的行為,您不應在此處進行任何巫術操作,因為那根本沒有道理。

如果確定要使用類型注釋,則mypy非常有用,其他開發人員也可能會覺得有用。

現在,下一點:

注意:在這種情況下,我希望對my_api /的每個請求都返回一個統一的響應(錯誤或其他)。

所以...添加一個端點,當其他路徑\\正則表達式路徑找不到匹配項時,該端點將充當全部捕獲以返回該統一響應。 我認為您過於復雜了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM