DRF中的几个查询参数URL

时间:2016-04-25 10:22:06

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

无法构建包含3个参数的网址。 没有在网络中找到任何适当的现有示例。

routers.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

谢谢!

1 个答案:

答案 0 :(得分:1)

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

GET params

如果您使用/api/general/reservation?enterprise=4&start=01-01-2015&end=01-31-2016这样path[?query],则可以使用以下格式撰写您的URI:/api/general/reservation,路径为?enterprise=4&start=01-01-2015&end=01-31-2016,查询为{{ 1}},这是可选的,位于路径之后。

要获取这些参数,您需要从请求中读取其值,例如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<param>)',查询不是路径的一部分,所以不包含它)

来自URL匹配的参数

否则,如果您尝试直接从网址解析这些内容,例如使用网址正则表达式,那么您需要一个更像此/api/general/reservation/4/01-01-2015/01-31-2016的表单,以便与此结构reservation/(?P<enterprise>)/(?P<start>)/(?P<end>)匹配

然后你的view方法看起来像

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