2017-10-20 62 views
2

我環顧了一會兒,現在似乎找不到任何甚至涉及差異的東西。正如標題所述,我試圖找出什麼區別通過url路徑參數獲得您的數據,如/content/7,然後在您的urls.py中使用正則表達式,並從request.GET.get()使用/content?num=7查詢參數。Django中的URL路徑參數與查詢參數

每個的優缺點是什麼,並且有沒有哪種情況下哪一個明顯比另一個好?

此外,從我可以告訴,(Django的)首選方法似乎使用URL路徑參數與正則表達式。這是否有任何理由,除了可能更乾淨的URL?歡迎任何有關該主題的其他信息。

+1

你應該改一下你的問題:URL參數和查詢參數是一樣的。你的意思是路徑參數(而不是網址參數)。 – dirkgroten

回答

1

這取決於您想遵守的架構模式。例如,根據REST體系結構模式(我們可以認爲它是最常見的),您需要設計URL,以便在沒有查詢參數的情況下指向大致對應於應用程序中名詞的「資源」,然後HTTP動詞對應到您可以在該資源上執行的操作。

如果,例如,您的應用程序的用戶,您將要設計的URL是這樣的:

GET /users/ # gets all users 
POST /users/ # creates a new user 
GET /users/<id>/ # gets a user with that id. Notice this url still points to a user resource 
PUT /users/<id> # updates an existing user's information 
DELETE /users/<id> # deletes a user 

然後,您可以使用查詢參數在資源篩選一組用戶。例如,要得到是活躍用戶,你的URL看起來像

/users?active=true 

所以總結一下,查詢參數與路徑參數取決於你的建築偏好。

休息的更詳細的解釋:http://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api

Roy Fielding的版本,如果你想獲得真正的學術:http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm

+0

因此,在一般情況下(又名非REST),它主要歸結爲優先選擇,但如果有人試圖堅持REST式原則,則該路徑用於指定單個資源或全套適用資源/遍歷層次結構,然後查詢參數用於進一步過濾由您的URL通過其屬性指向的資源。聽起來對嗎?現在我想我會在沒有RESTful API的情況下完成我的項目,並繼續在內部處理所有內容以便發佈它,然後我可以添加DRF並設置適當的公共API,並棄用舊的方法。 – gucciferXCIV

+0

是的,我認爲是的。查詢參數不僅僅用於過濾;您還可以根據您的要求以不同的方式對資源進行排序和返回。只要確保您不會發送用戶名和密碼作爲查詢參數;) – slider

+0

URL中沒有明文密碼?爲什麼不?!哈哈,再次感謝!我會接受你的回答,但是如果其他人有任何澄清,爲什麼Django似乎贊成查詢參數的路徑參數,我有興趣瞭解一下。 – gucciferXCIV