2017-10-20 64 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