Django Swagger没有显示未经许可的网址

时间:2017-08-02 06:38:51

标签: python django django-swagger

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

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

现在,当我有一些像这样的权限类的View时

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

class UserProfileView(viewsets.ModelViewSet):

    serializer_class = UserProfileSerializer
    serializer_class_2 = UserServiceSerializer

我看到以下视图

enter image description here

但是在这两个视图中添加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 = []

我看到这样的视图

enter image description here

我不想在每个视图中添加权限类,因为我对所有视图都有相同的类,我在我的rest-framework设置中提到过。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:1)

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

对于corse,您可以默认为所有视图设置此行为:

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

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

如果您不想要,但希望查看所有操作 - 只需点击Swagger中的Authorize按钮,然后输入您的令牌或登录名和密码(取决于SECURITY_DEFINITIONS setting)。< / p>

答案 1 :(得分:0)

似乎您已应用默认权限类以使API不公开,因此一种克服此问题的方法是将“ AllowAny”用作默认权限类,但是这样您的所有API都将是公开的,因此提出了另一种可以尝试的解决方案您settings.py

中的草率设置
SWAGGER_SETTINGS = {

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

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