Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django-Swagger未显示未经类许可的URL_Python_Django_Django Swagger - Fatal编程技术网

Python Django-Swagger未显示未经类许可的URL

Python Django-Swagger未显示未经类许可的URL,python,django,django-swagger,Python,Django,Django Swagger,我正在为我的项目设置Django rest swagger。Django restframework有以下设置 REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': ( 'oauth2_provider.contrib.rest_framework.OAuth2Authentication', ), 'DEFAULT_PERMISSION_CLASSES': ( 'rest_framewo

我正在为我的项目设置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
class CreateUserView(viewsets.ModelViewSet):
    serializer_class = UserServiceSerializer
    authentication_classes = []
    permission_classes = []

class UserProfileView(viewsets.ModelViewSet):

    serializer_class = UserProfileSerializer
    serializer_class_2 = UserServiceSerializer
    permission_classes = []
我看到以下观点

但是当在这两个视图中添加
权限\u类时

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

class UserProfileView(viewsets.ModelViewSet):

    serializer_class = UserProfileSerializer
    serializer_class_2 = UserServiceSerializer
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
class CreateUserView(viewsets.ModelViewSet):
    serializer_class = UserServiceSerializer
    authentication_classes = []
    permission_classes = []

class UserProfileView(viewsets.ModelViewSet):

    serializer_class = UserProfileSerializer
    serializer_class_2 = UserServiceSerializer
    permission_classes = []


我不想在每个视图中添加权限类,因为我的所有视图都有相同的类,我在rest框架设置中也提到了这一点。我该怎么做

权限类设置为
[]
时,将清空此视图的默认权限类

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

REST_FRAMEWORK = {
    # ...
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.AllowAny',
    ),
}
但是要小心,在这种情况下,任何未经授权的用户都可以在数据库中创建记录


如果您不想要它,但想查看所有操作,只需在Swagger中单击“授权”按钮,然后输入您的令牌或登录名和密码(取决于)。

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

SWAGGER_SETTINGS = {

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

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

我问的问题是,当我在视图中提到某个权限类时,与该视图相关的URL会以虚张声势的方式出现。如果我没有提到任何权限类,这意味着它在我的设置中使用默认权限类,则与该视图相关的URL不会显示在swagger中。默认情况下,swagger仅显示打开的公共方法,因为默认情况下它没有任何授权凭据。在第一种情况下,您会看到
CreateUserView
中的URL,因为
permission\u classes
是空的,并且这是一个公共视图,
UserProfileView
使用默认设置,只允许授权用户使用api。在第二种情况下,您将
UserProfileView
也设置为公共。您可以阅读有关不同权限的更多信息。这是有用的信息。谢谢你的帮助。请在你的回答中加上这一点。谢谢