DRF 中的几个查询参数 URL
Several query params URL in DRF
无法构建包含 3 个参数的 URL。
未在网络中找到任何合适的现有示例。
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
?
谢谢!
简而言之,我建议您选择一种方式,不要将 GET 参数与 URL 结构混合使用。
获取参数
如果您使用 URI 这样的 /api/general/reservation?enterprise=4&start=01-01-2015&end=01-31-2016
,您的 URI 可以写成这种形式:path[?query]
,路径为 /api/general/reservation
,查询为?enterprise=4&start=01-01-2015&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<param>)'
不需要,查询不是路径的一部分,所以不要包含它)
参数来自 URL 匹配
否则,如果您尝试直接从 URL 中解析这些内容,例如使用 URL 正则表达式,那么你需要一个更像这样的形式 /api/general/reservation/4/01-01-2015/01-31-2016
来匹配这种结构的东西 reservation/(?P<enterprise>)/(?P<start>)/(?P<end>)
然后你的视图方法看起来像
def do_something(request, enterprise, start, end):
# do something with those values
无法构建包含 3 个参数的 URL。 未在网络中找到任何合适的现有示例。
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
?
谢谢!
简而言之,我建议您选择一种方式,不要将 GET 参数与 URL 结构混合使用。
获取参数
如果您使用 URI 这样的 /api/general/reservation?enterprise=4&start=01-01-2015&end=01-31-2016
,您的 URI 可以写成这种形式:path[?query]
,路径为 /api/general/reservation
,查询为?enterprise=4&start=01-01-2015&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<param>)'
不需要,查询不是路径的一部分,所以不要包含它)
参数来自 URL 匹配
否则,如果您尝试直接从 URL 中解析这些内容,例如使用 URL 正则表达式,那么你需要一个更像这样的形式 /api/general/reservation/4/01-01-2015/01-31-2016
来匹配这种结构的东西 reservation/(?P<enterprise>)/(?P<start>)/(?P<end>)
然后你的视图方法看起来像
def do_something(request, enterprise, start, end):
# do something with those values