DRF:如何将基于类的视图的身份验证和权限信息添加到自动生成的文档中?

时间:2018-10-10 04:12:24

标签: django django-rest-framework core-api

在Django Rest Framework中,您可以简单地生成文档:

https://www.django-rest-framework.org/topics/documenting-your-api/#documenting-your-api

from rest_framework.documentation import include_docs_urls

urlpatterns = [
    ...
    url(r'^docs/', include_docs_urls(title='My API title'))
]

自动生成的文档具有从序列化程序很好地生成的请求正文,从docs生成的很好的文档,但是如何添加身份验证和权限类信息?

我的某些基于类的视图具有自定义的authentication_classespermission_classes,以及如何显示有关它们的信息?

1 个答案:

答案 0 :(得分:0)

查看include_docs_urls会看到以下内容:

def include_docs_urls(
        title=None, description=None, schema_url=None, public=True,
        patterns=None, generator_class=SchemaGenerator,
        authentication_classes=api_settings.DEFAULT_AUTHENTICATION_CLASSES,
        permission_classes=api_settings.DEFAULT_PERMISSION_CLASSES,
        renderer_classes=None):
    ....

因此,解决方案是:

在settings.py中设置authentication_classespermission_classes

  • 示例authentication_classes:
# settings.py

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_simplejwt.authentication.JWTAuthentication',
        'rest_framework.authentication.SessionAuthentication',  # <---- 1
    ),
    'DEFAULT_PERMISSION_CLASSES': (
        'common.permissions.IsDeveloper',   # <---- 2 don't forget the ','
    )
}
  

注意:
  1.需要SessionAuthentication,因为 DRF自我描述API 使用会话来保持用户登录
  2. common.permissions.IsDeveloper是一个自定义权限类,您可以定义自己的身份并将引用位置放在此处作为字符串,也可以使用默认权限。

  • 样品许可等级:
# common/permissions.py

class IsDeveloper(permissions.BasePermission):
    def has_permission(self, request, view):
        user_groups = request.user.groups.values_list('name', flat=True)
        return bool('Developer' in user_groups)

然后,如果您没有登录或不在“开发人员”组中的登录用户,则会出现:

enter image description here