【问题标题】:Several query params URL in DRFDRF 中的几个查询参数 URL
【发布时间】:2016-04-25 10:22:06
【问题描述】:

无法构造包含 3 个参数的 URL。 没有在网络上找到任何合适的现有示例。

路由器.py

router = routers.SimpleRouter()
router.register(r'reservation(?P<param1>)', ReservationViewSet, 'reservation')

这适用于一个参数。 添加另外两个参数来解析 URL 的正确语法是什么:

http://127.0.0.1:8000/api/general/reservation?enterprise=4&start=01-01-2015&end=01-31-2016

?

谢谢!

【问题讨论】:

  • “3 参数” 是什么意思? apigeneralreservation enterprisestartend?
  • 企业、开始和结束

标签: python django django-rest-framework query-string query-parameters


【解决方案1】:

简而言之,我建议您选择其中一种方式,不要将 GET 参数与 URL 结构混合。

获取参数

如果你使用URI 像这样/api/general/reservation?enterprise=4&amp;start=01-01-2015&amp;end=01-31-2016,你的URI 可以写成这种形式:path[?query],路径是/api/general/reservation,查询是?enterprise=4&amp;start=01-01-2015&amp;end=01-31-2016,这是可选的,在后面路径。

要获取这些参数,您需要从请求中读取它们的值,例如enterprise = request.GET['enterprise']

因此,如果您想在您的 ViewSet 中保留该结构,只需阅读您的视图方法中的那些参数

def do_something(request):
    # read the params first
    enterprise = request.GET['enterprise']
    ...
    # do something with those values

要使用此方案并匹配您的路径,只需像这样路由

router.register(r'reservation', ReservationViewSet, 'reservation')

r'reservation(?P&lt;param&gt;)' 不需要,查询不是路径的一部分,所以不要包含它)

来自 URL 匹配的参数

否则,如果您尝试直接从 URL 解析它们,例如使用 URL 正则表达式,那么您需要一个更像 /api/general/reservation/4/01-01-2015/01-31-2016 的表单来匹配这种结构 reservation/(?P&lt;enterprise&gt;)/(?P&lt;start&gt;)/(?P&lt;end&gt;)

然后你的视图方法看起来像

def do_something(request, enterprise, start, end):
    # do something with those values

【讨论】:

  • 我正在从请求中读取值。一切正常,直到我有一个参数。我无法配置 router.py 来解析带有 3 个参数的 URL。
  • 如果要使用GET参数,只需router.register(r'reservation', ReservationViewSet)即可,无需在URL结构中指定参数
  • bakkal,非常感谢!这条评论解决了我的问题。我们应该怎么去这里,因为只有您最后的评论解决了我的问题? (明白我的问题不是很清楚)
  • bakkal,再次感谢您回答我的问题,您对我帮助很大。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-22
  • 1970-01-01
  • 1970-01-01
  • 2022-10-15
  • 2017-08-23
  • 2020-01-21
相关资源
最近更新 更多