从不喜欢DRF的老错误?忘记这一点,接受RFC7807-问题细节!

drf-problems的Python项目详细描述


drf问题PyPI version

tl;dr

这个库在我们最喜欢的django rest框架中实现RFC 7807!或者,通俗地说,它在httpapi中引入了“问题细节”。

目录

功能

  • 处理异常以返回带有问题详细信息模型的响应。
  • 在权限失败的视图中添加权限混合和基类存储异常来引发异常。
  • 添加视图MIXIN,引发失败权限的异常。
  • 这些权限与drf 3.9.0中引入的可组合权限兼容!
  • 具有问题描述终结点以了解给定代码的问题。
  • 具有检查最低API版本的示例权限。

先决条件

  • django>;=2.0(用2.2测试)
  • djangorestframework>;=3.0.0(用3.9.0测试)

安装

像安装任何django库一样安装库。

  • 使用PIP安装。 pip install drf-problems
  • 将“DRF问题”添加到已安装的应用程序中设置。
INSTALLED_APPS=(...'drf_problems',)
  • 需要替换drf的默认异常处理程序。在您的settings.py中,更新:
REST_FRAMEWORK={...'EXCEPTION_HANDLER':'drf_problems.exceptions.exception_handler',
  • 要使用问题描述url,您需要更新您的urls.py
urlpatterns=[...path('',include('drf_problems.urls'))]

用法

例外

在异常类中,用类型uri中使用的错误代码字符串定义default_code。 要设置自定义标题,请使用问题类型的可读摘要定义title。 要设置描述,请使用描述问题的长段落定义description

最后,确保使用drf_problems.utils.register_exception函数或drf_problems.utils.register装饰器注册异常。 下面是一个示例异常类:

fromdrf_problems.utilsimportregister_exception,register@register# Either use this decoratorclassInvalidVersionRequestedException(exceptions.NotAcceptable):default_code='invalid_version'title='Invalid API version'default_detail='Provided API version is invalid.')description='Malformed or unsupported version string is provided with the request.'register_exception(InvalidVersionRequestedException)# Or this method directly.

有权限

使用您现有的权限,或者直接从(。 在所需异常类的权限中定义exception_class。 对于灵活性,您甚至可以通过在权限对象上设置^ {CD12}}属性来设置异常实例。

下面是一个示例权限类:

fromdrf_problems.permissionsimportBaseProblemPermissionclassMinimumVersionRequiredPermission(BaseProblemPermission):exception_class=InvalidVersionRequestedException

视图

^ {STR 1 } $Note :权限不会从视图中抛出所需异常,直到视图从^ {CD13>}MIXIN扩展。所以,记住也要更新你的视图,哪些权限是更新的!

资源

路线图

  • 使用异常和权限添加具有某些示例视图的测试。
  • 更好地记录代码。

贡献

任何形式的贡献都是非常受欢迎的,无论是发现新的问题、改进的想法还是请求。

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

推荐PyPI第三方库


热门话题
java如何将cassandra中的行数据转换为与列相关的嵌套json   java如何使用jcr XPath在jcr:content/@jcr:data中搜索?   java在使用openCV进行安卓开发时如何利用手机的广角镜头   java解析扩展了接口,结束了一个潜在的无限循环   位置服务的@Override方法中存在java Android应用程序错误   java本地线程的用途和需求是什么   具有左右子访问的java节点树遍历   java验证JsonWebToken签名   JUL日志处理程序中的java日志记录   嵌入式Java读取给定时间段的串行数据。   java有没有办法从多个URL获取多个图像?   java线程通过等待intent阻止自己发送intent   java Spring MVC解析多部分内容请求   java JPA/Hibernate静态元模型属性未填充NullPointerException   java格式错误的字符(需要引号,得到I)~正在处理   java为什么PrintWriter对象抛出FileNotFoundException?   java Neo4j未正确保存标签   java IE不加载图像