一个django应用程序,使用查询参数对drf查询集应用过滤器,使用voluptuous进行验证。

drf-url-filters的Python项目详细描述


DRF URL筛选器

drf url filters是一个简单的django应用程序,可以在drf上应用过滤器 modelviewset的queryset以一种干净、简单和可配置的方式。它也 支持对传入查询参数及其值进行验证。一个 漂亮的Python包 voluptouos正在使用 对于传入查询参数的验证。最精彩的部分 voluptous是您可以根据查询定义自己的验证 参数要求。

#快速启动

安装

  1. 从这个git repo下载drf-url-filtersapp包,或者 使用python pip安装,如pip install drf-url-filters
  2. 在django的settings.py文件的已安装应用程序中添加filters。 项目。

如何工作

  1. 视图或模型视图集应从 filters.mixins.FiltersMixin
  2. 要使用drf-url-filters应用筛选器,我们需要配置 视图具有dict映射filter_mappings,该映射转换为 要对列进行查询的传入查询参数 查询集上的名称。
  3. (可选)对传入的值执行任何预处理 查询参数,添加另一个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和朋友 cdaxsaurabhjha鼓励人们 加入开源社区。

支架

请[开题] (https://github.com/manjitkumar/drf-url-filters/issues/new)表示支持。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java什么数据库最类似于Map,每个用户/id存储无限多个“键”和“值”?   java仅使用super pom进行测试   内存不足如何解析java。OutOfMemoryError:Java堆空间在增加堆大小的情况下将意味着延迟OutOfMemoryError   来自另一个类的mysql和java jdbc调用[运行时应用程序]   java通过下拉菜单更改搜索框搜索的内容   JAVAlang.ClassNotFoundException:sun。jdbc。odbc。JdbcOdbcDriver   java Selenium点击链接   JavaSpringHibernate:从唯一值列表中获取对象列表   java Bing广告与桌面身份验证问题   java如何在没有任何外部SDK的情况下从安卓打印到收据打印机?   未调用java菜单片段类   java在IDEA和PyCharm中同时为同一个项目工作   java我们如何为同一个异常提供不同的海关信息   jakarta ee中是否预定义了“请求”和“响应”变量或值?   java更好地解决“之前和之后”难题?   尝试将数据从Excel添加到Java   发送电子邮件的Java代码只适用于一个电子邮件id?   java如何从资产解析XML?