Python Django-Swagger未显示未经类许可的URL
我正在为我的项目设置Django rest swagger。Django restframework有以下设置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
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
也设置为公共。您可以阅读有关不同权限的更多信息。这是有用的信息。谢谢你的帮助。请在你的回答中加上这一点。谢谢