4

我正在为我的项目设置 Django-rest-swagger。我对 Django-restframework 有以下设置。

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'oauth2_provider.contrib.rest_framework.OAuth2Authentication',
    ),
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    ),
}

现在,当我拥有像这样的权限类的视图时

class CreateUserView(viewsets.ModelViewSet):
    serializer_class = UserServiceSerializer
    authentication_classes = []
    permission_classes = []

class UserProfileView(viewsets.ModelViewSet):

    serializer_class = UserProfileSerializer
    serializer_class_2 = UserServiceSerializer

我看到以下视图

在此处输入图像描述

但是当permission_classes像这样添加两个视图时

class CreateUserView(viewsets.ModelViewSet):
    serializer_class = UserServiceSerializer
    authentication_classes = []
    permission_classes = []

class UserProfileView(viewsets.ModelViewSet):

    serializer_class = UserProfileSerializer
    serializer_class_2 = UserServiceSerializer
    permission_classes = []

我看到这样的观点

在此处输入图像描述

我不想在每个视图中添加权限类,因为我的所有视图都有相同的类,并且我在我的休息框架设置中提到了这一点。我怎样才能做到这一点?

4

2 回答 2

1

当您设置permission_classes[]清空此视图的默认权限类时。

当然,您可以默认为所有视图设置此行为:

REST_FRAMEWORK = {
    # ...
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.AllowAny',
    ),
}

但要小心,在这种情况下,任何未经授权的用户都可以在您的数据库中创建记录。

如果您不想要它,但想查看所有操作 - 只需单击AuthorizeSwagger 中的按钮并输入您的令牌或登录名和密码(取决于SECURITY_DEFINITIONS设置)。

于 2017-08-02T14:32:05.960 回答
0

似乎您已应用默认权限类以使 API 不公开,因此解决此问题的一种方法是将“AllowAny”应用为默认权限类,但这样您的所有 API 都将是公开的,因此您可以尝试的另一种解决方案是将 swagger 设置放入你的settings.py

SWAGGER_SETTINGS = {

'SECURITY_DEFINITIONS': {
'api_key': {
    'type': 'apiKey',
    'in': 'header',
    'name': 'Authorization'
}
},

这将在使用该 API 时在浏览器中请求令牌。

于 2019-08-23T12:39:45.753 回答