一个django应用程序,使用查询参数对drf查询集应用过滤器,使用voluptuous进行验证。
drf-url-filters的Python项目详细描述
DRF URL筛选器
drf url filters是一个简单的django应用程序,可以在drf上应用过滤器 modelviewset的queryset以一种干净、简单和可配置的方式。它也 支持对传入查询参数及其值进行验证。一个 漂亮的Python包 voluptouos正在使用 对于传入查询参数的验证。最精彩的部分 voluptous是您可以根据查询定义自己的验证 参数要求。
#快速启动
安装
- 从这个git repo下载drf-url-filtersapp包,或者 使用python pip安装,如pip install drf-url-filters。
- 在django的settings.py文件的已安装应用程序中添加filters。 项目。
如何工作
- 视图或模型视图集应从 filters.mixins.FiltersMixin。
- 要使用drf-url-filters应用筛选器,我们需要配置 视图具有dict映射filter_mappings,该映射转换为 要对列进行查询的传入查询参数 查询集上的名称。
- (可选)对传入的值执行任何预处理 查询参数,添加另一个dictfilter_value_transformations 将传入的查询参数映射到应应用于的函数 对应的值。结果值用于 最终过滤。
验证.py
importsixfromfilters.schemaimportbase_query_params_schemafromfilters.validationsimport(CSVofIntegers,IntegerLike,DatetimeWithTZ)# make a validation schema for players filter query paramsplayers_query_schema=base_query_param_schema.extend({"id":IntegerLike(),"name":six.text_type,# Depends on python version"team_id":CSVofIntegers(),# /?team_id=1,2,3"install_ts":DatetimeWithTZ(),"update_ts":DatetimeWithTZ(),"taller_than":IntegerLike(),})
视图.py
fromrest_frameworkimport(viewsets,filters,)from.modelsimportPlayer,Teamfrom.paginationimportResultSetPaginationfrom.serializersimportPlayerSerializer,TeamSerializerfrom.validationsimportteams_query_schema,players_query_schemafromfilters.mixinsimport(FiltersMixin,)classPlayersViewSet(FiltersMixin,viewsets.ModelViewSet):""" This viewset automatically provides `list`, `create`, `retrieve`, `update` and `destroy` actions. """queryset=Player.objects.prefetch_related('teams'# use prefetch_related to minimize db hits.).all()serializer_class=PlayerSerializerpagination_class=ResultSetPaginationfilter_backends=(filters.OrderingFilter,)ordering_fields=('id','name','update_ts')ordering=('id',)# add a mapping of query_params to db_columns(queries)filter_mappings={'id':'id','name':'name__icontains','team_id':'teams','install_ts':'install_ts','update_ts':'update_ts','update_ts__gte':'update_ts__gte','update_ts__lte':'update_ts__lte','taller_than':'height__gte',}field_value_transformations={'taller_than':lambdaval:val/30.48# cm to ft}# add validation on filtersfilter_validation_schema=players_query_schema
使用drf-url-filters在新列上添加新筛选器 就像在dict中添加一个新的键一样简单。 特定列与从 filter_mappingsdict.
许可证
MIT License版权所有(c)2016 Manjit Kumar。
学分
特别感谢 voluptouos和朋友 cdax和 saurabhjha鼓励人们 加入开源社区。
支架
请[开题] (https://github.com/manjitkumar/drf-url-filters/issues/new)表示支持。