python - 删除特定 url 路径的身份验证和权限

标签 python django django-rest-framework django-rest-auth django-rest-framework-simplejwt

我正在使用 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_viewapi_view装饰 DRF View 函数。这是最难也最可能是最不可能的部分,因为你必须取消之前的 api_view装饰器。如果 View 函数用 api_view 修饰,那么它已经被转换成 Django View 函数,所以 permision_classes也不是 authentication_classes可以附加到类:

关于python - 删除特定 url 路径的身份验证和权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60666418/

相关文章:

jquery - 你能在 jquery 模态对话框中提交表单吗

python - Django模型字段中的 'default=...'默认设置为 'blank=True'吗?

json - django rest框架-请求上下文 key 错误

python - 更改现有 Excel 工作簿中列中内容的格式

python - 在 Flask 上阅读 PEM 证书

python - django 中带有 id 的多个文本字段

python - Django REST Framework 中除 AUTH_USER_MODEL 之外的用户模型

python - 如何覆盖 django rest 框架( DRF )中的 Response 类?

python - Python中的递归嵌套表达式

python - 删除 gtk.button 的边框