微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

url 中的空查询参数

如何解决url 中的空查询参数

使用 Django==2.2.13,djangorestframework==3.8.1

这是一个确定“做什么是正确的事情”而不是“如何做”的问题。

我有一个采用一些可选查询参数的后端 API 路由。

前端已经注意到,如果他们调用

https://my_domain.com/some_path/?foo=

它们触发 ["natural"] 行为,检查 foo 值,类似于错误值,获取空值并做出响应:

{
    "the_query_parameter": [
        "Select a valid choice.  is not one of the available choices."
    ]
}

我认为,如果一个端点支持一个查询参数,或者其中的一百个,如果我不试图通过它们进行过滤,我不应该像这样包含它们:

https://my_domain.com/some_path/

(如果你不想过滤就不要使用它)

对方认为所有的查询参数都应该在,空与否。 (如果你包含一个空的查询参数,那么你想要所有 -- 未过滤)

问题是,在方法论/模式方面,什么是“正确”的做法?

编辑:看这里:https://tools.ietf.org/html/rfc3986#section-3.4 我看到对 "key=value" pairs 的引用,而不是带有空值的键

编辑 2:如果可能的话,我想得到一个 Django/DRF 特定的答案(当然,非 Django/DRF 特定的也很好,可以比较)



tl;dr 如果您好奇,这是端点的基本外观:

在视图文件中:

class SomeView(viewsets.ModelViewSet):
  filter_class = SomeViewFilter
  ...

在过滤器文件中:

class SomeViewFilter(django_filters.FilterSet):
  ...
  the_query_parameter = EnumMultipleChoiceFilter(
    choices=[(my_val.name,my_val.name) for my_val in SomeIntEnumClass],enum= SomeIntEnumClass,)

EnumMultipleChoiceFilter 只是将名称转换为枚举值,并从 MultipleChoiceFilter获取,它的 filter() 在转换值后执行 return super().filter(qs,value),或者其中的 none 值案例,与 MultipleChoiceFilter

类似的行为

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。