【问题标题】:URL path parameters vs query parameters in DjangoDjango中的URL路径参数与查询参数
【发布时间】:2017-10-20 16:41:56
【问题描述】:

我已经环顾了一会儿,似乎找不到任何涉及差异的东西。正如标题所述,我试图找出通过 url 路径参数(如 /content/7)获取数据,然后在 urls.py 中使用正则表达式,以及使用 request.GET.get() 从查询参数(如 /content?num=7)获取数据有什么不同。 .

每种方法的优缺点是什么?在任何情况下,其中一种显然是比另一种更好的选择吗?

此外,据我所知,(Django 的)首选方法似乎是使用带有正则表达式的 url 路径参数。除了可能更干净的 URL 之外,还有其他原因吗?欢迎提供与该主题相关的任何其他信息。

【问题讨论】:

  • 您应该重新表述您的问题:URL 参数和查询参数是一回事。你的意思是路径参数(而不是 url 参数)。

标签: python django


【解决方案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

总而言之,查询参数与路径参数取决于您的架构偏好。

更详细的REST解释: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

【讨论】:

  • 因此在一般情况下(也称为非 REST),它主要取决于偏好,但如果有人试图坚持 RESTful 原则,则路径是指定单个资源或全套资源适用的资源/遍历层次结构,然后查询参数用于进一步过滤您的 URL 通过其属性指向的资源。听起来对吗?现在我想我会在没有 RESTful API 的情况下完成我的项目,并继续在内部处理所有内容以使其交付,然后我可以添加 DRF 并设置适当的公共 API,并弃用旧方法。
  • 是的,我认为这是正确的。查询参数不仅用于过滤;您还可以根据您的要求以不同的方式对资源进行排序和返回。只要确保您没有将用户名和密码作为查询参数发送;)
  • 网址中没有明文密码?为什么不?!哈哈,好的,再次感谢!我会接受你的回答,但如果其他人对为什么 Django 似乎更喜欢路径参数而不是查询参数有任何澄清,我很想知道。
猜你喜欢
  • 2022-01-11
  • 1970-01-01
  • 2020-01-16
  • 2021-08-16
  • 1970-01-01
  • 2021-05-26
  • 2016-04-05
  • 2011-01-04
  • 2015-09-07
相关资源
最近更新 更多