我正在为我的项目设置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
我看到以下视图
但是在这两个视图中添加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 = []
我看到这样的视图
我不想在每个视图中添加权限类,因为我对所有视图都有相同的类,我在我的rest-framework设置中提到过。我怎样才能做到这一点?
答案 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时在浏览器中请求令牌。