从不喜欢DRF的老错误?忘记这一点,接受RFC7807-问题细节!
drf-problems的Python项目详细描述
drf问题
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扩展。所以,记住也要更新你的视图,哪些权限是更新的!
资源
路线图
- 使用异常和权限添加具有某些示例视图的测试。
- 更好地记录代码。
贡献
任何形式的贡献都是非常受欢迎的,无论是发现新的问题、改进的想法还是请求。