我正在使用 DRF 并遇到了这个问题。我在 urls.py
中导入了第三方 View 像这样的文件:
from some_package import some_view
urlpatterns = [
path('view/',some_view)
]
但我面临的问题是因为我在
settings.py
中启用了默认权限类像这样:REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.TokenAuthentication',
),
'DEFAULT_PERMISSION_CLASSES':(
'rest_framework.permissions.IsAuthenticated',
),
}
现在,当我使用 url 调用该 View 时,它给了我 身份验证错误 正如我 不提供代币 .有没有一种方法可以绕过身份验证错误而无需直接更改 View ,我知道我们可以删除该特定 View 的权限,但为此我必须对该
some_view
进行更改功能代码。但我不想这样做,假设我们无权访问该功能,我们只能传递数据并接收响应。如何绕过身份验证而不必更改该功能代码。我尝试搜索,但找不到我要找的东西。
我假设可能有某种方式我们可以从 urls.py 中做到这一点,例如指定任何参数或类似的东西,使该特定 View 绕过身份验证而无需更改函数代码。
像这样的东西:
from some_package import some_view
urlpatterns = [
path('view/',some_view,"some_parameter") #passing someparameter from here or something like that
]
有可能是我在找什么吗?提前致谢 :)
最佳答案
因此,对于第三方 View 最合适的方法是通过在您的 urls.py
中定义它们来使用装饰器。 :
情况1
我假设 some_view
是从 rest_framework.views.APIView
继承的类:
urls.py
from django.urls import path
from rest_framework.decorators import permission_classes, authentication_classes
from rest_framework.permissions import AllowAny
from some_package import some_view
urlpatterns = [
path('', authentication_classes([])(permission_classes([AllowAny])(some_view)).as_view())
]
案例二
我假设
some_view
是一个简单的 Django View 函数,您需要为 GET
定义它方法:urls.py
from django.urls import path
from rest_framework.decorators import api_view, permission_classes, authentication_classes
from rest_framework.permissions import AllowAny
from some_package import some_view
urlpatterns = [
path('', api_view(['GET'])(authentication_classes([])(permission_classes([AllowAny])(some_view))))
]
案例3
我假设
some_view
是 api_view
装饰 DRF View 函数。这是最难也最可能是最不可能的部分,因为你必须取消之前的 api_view
装饰器。如果 View 函数用 api_view
修饰,那么它已经被转换成 Django View 函数,所以 permision_classes
也不是 authentication_classes
可以附加到类:
关于python - 删除特定 url 路径的身份验证和权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60666418/