Django REST framwork过滤

Django REST framework提供了内置的很多过滤方法(查询),文档非常详尽,例如 URL过滤,查询参数过滤。

内置过滤

第三方包

第三方包在特定环境下更为简便

Django URL Filter使用简介

django-url-filter提供了一个安全方式通过面向用户友好的URLs来过滤数据,文档可参考 Django URL Filter

  • 安装django-url-filter

  • 定制过滤

django-url-filter使用非常方便,并且和Django REST framework无缝结合,只需要简单指定过滤字段,就可以在URL中使用。

举例,原先DRF的视图代码如下:

只需要添加url_filter过滤模块,然后再增加字段定义就可以:

然后就可以在URL中使用如下查询:

Django REST framework - filtering against query param提供了参考

注意:实际上过滤的规则和Django相同,采用约定俗成的方法,例如,要选择时间范围:

假设数据库字段是create_time

注意:在URL中传递"时间"需要做一个字符编码转换,例如

原始字符

转换URL(urlencode)

空格

+

:

%3a

通过google可以搜索到在线转换urlencode,不过,使用python很容易实现,见下文

举例:

  • 2017-11-10 11:02 转换到URL 2017-11-10+11%3a02

所以,如果要查询 2017-11-10 11:002017-11-10 11:10的数据,应该传递

使用Python转换字符串

参考How to urlencode a querystring in Python?

Python2实现urlencode

Python 2使用 urllib.quote_plus 转换

Python3实现urlencode

在Python 3中,urllib包被分解成更小的组件,需要使用 urllib.parse.quote_plus

另外,在 cdown/gist:1163649 提供了一个shell脚本来转换

参考

Last updated

Was this helpful?