Django如何配置URL正则以匹配携带额外查询参数的请求
问题解答
Django的URL路由匹配逻辑默认会自动剥离?及之后的所有查询字符串参数,仅匹配?前面的路径部分,所以你不需要在正则表达式中额外编写查询参数的匹配规则。
你当前定义的正则r'^stream/(?P<pk>[0-9a-f-]+)$'本身就可以匹配带查询参数的请求,如果实际出现匹配失败的情况,按以下两种场景处理:
场景1:请求路径(?前的部分)和无参数请求完全一致
不需要修改路由正则,匹配失败和路由规则无关,请排查以下问题:
- 视图函数内部是否主动抛出了404响应
- 上层反向代理、Web服务器是否改写了实际请求的路径
- 请求中的pk值是否包含
0-9、a-f、-之外的字符
查询参数可直接在视图函数中通过request.GET对象获取,比如:
# 视图中获取参数示例 st = request.GET.get('st') e = request.GET.get('e')
场景2:请求路径末尾可能存在多余的斜杠
如果你的实际请求格式为http://localhost/stream/xxx/?st=xxx(路径末尾多了斜杠),则修改正则为如下即可:
url(r'^stream/(?P<pk>[0-9a-f-]+)/?$', App_Views.stream, name='stream'),
其中/?表示末尾的斜杠为可选匹配,兼容带/和不带/的两种路径格式。
内容的提问来源于stack exchange,提问作者user16837137
相关产品推荐
相关产品推荐

