Django REST framwork过滤
Django REST framework提供了内置的很多过滤方法(查询),文档非常详尽,例如 URL过滤,查询参数过滤。
内置过滤
SearchFilter - 内建的控制台,简单查询。底层是基于Django admin's search functionality
OrderingFilter - 提供简单的结果排序功能(参数)
第三方包
第三方包在特定环境下更为简便
Django REST framework full word search filter - 全文搜索,作为替代
filters.SerchFilterDjango URL Filter - 这是一个非常简洁并且用户友好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转换到URL2017-11-10+11%3a02
所以,如果要查询 2017-11-10 11:00 到 2017-11-10 11:10的数据,应该传递
使用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?