【发布时间】:2020-06-25 05:32:20
【问题描述】:
我正在与 DRF 合作并遇到了这个问题。我有一个第三方视图,我将其导入到我的urls.py 文件中,如下所示:
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 调用该视图时,它给了我 authentication error 因为我 不提供令牌。有没有办法可以绕过身份验证错误而不必须直接在视图中进行更改,我知道我们可以删除该特定视图的权限,但为此我必须更改 some_view 功能代码。但我不想这样做,假设我们无权访问该功能,我们只能传递数据并接收响应。如何绕过身份验证而不必更改该功能代码。
我尝试搜索,但找不到我要找的东西。
我假设我们可以通过 urls.py 以某种方式做到这一点,例如指定任何参数或类似的东西,使特定视图绕过身份验证而无需更改函数代码。
类似这样的:
from some_package import some_view
urlpatterns = [
path('view/',some_view,"some_parameter") #passing someparameter from here or something like that
]
这可能是我正在寻找的吗?在此先感谢:)
【问题讨论】:
-
我不知道有什么方法可以做到这一点。你最好的办法是包装视图(即编写你自己的)并设置
authentication_classes。这对你有用吗? -
您也可以删除
DEFAULT_AUTHENTICATION_CLASSES和DEFAULT_PERMISSION_CLASSES并将其移动到您自己的父类中进行身份验证和授权,然后在您的视图中继承它。那么您的第三方视图将不会默认为您在settings.py中提供的内容,因为您没有提供任何内容。 -
是的,我可以这样做,但这会导致进行更多更改,而不是执行您建议的操作,最好覆盖该函数并为覆盖函数指定
authentication_classes,然后调用原始函数从那个被覆盖的函数。 @yvesonline -
这就是我的第一条评论的意思。老实说,如果您要导入的只是一个视图,我认为这是要走的路。
-
我已经尝试过这种覆盖方式。对我来说效果很好。这样做是个好主意。我很久以前就做过了。
标签: python django django-rest-framework django-rest-auth django-rest-framework-simplejwt