Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 删除特定url路径的身份验证和权限_Python_Django_Django Rest Framework_Django Rest Auth_Django Rest Framework Simplejwt - Fatal编程技术网

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

Python 删除特定url路径的身份验证和权限,python,django,django-rest-framework,django-rest-auth,django-rest-framework-simplejwt,Python,Django,Django Rest Framework,Django Rest Auth,Django Rest Framework Simplejwt,我与DRF合作,遇到了这个问题。我在url.py文件中导入了一个第三方视图,如下所示: from some_package import some_view urlpatterns = [ path('view/',some_view) ] from some_package import some_view urlpatterns = [ path('view/',some_view,"some_parameter") #passing someparam

我与DRF合作,遇到了这个问题。我在
url.py
文件中导入了一个第三方视图,如下所示:

from some_package import some_view

urlpatterns = [
    path('view/',some_view)
]
from some_package import some_view

    urlpatterns = [
        path('view/',some_view,"some_parameter") #passing someparameter from here or something like that
    ]
但我面临的问题是,我在我的
settings.py中启用了默认权限类,如下所示:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
               'rest_framework.authentication.TokenAuthentication',
    ),
    'DEFAULT_PERMISSION_CLASSES':(
                'rest_framework.permissions.IsAuthenticated',
    ),

}
现在,当我使用url调用该视图时,它会给我身份验证错误,因为我没有提供令牌。是否有一种方法可以绕过身份验证错误而不必直接在视图中进行更改,我知道我们可以删除该特定视图的权限,但为此,我必须对
一些视图
功能代码进行更改。但我不想这样做,假设我们没有访问该函数的权限,我们只能传递数据和接收响应。如何绕过身份验证而不必更改该函数代码。 我试着搜索,但找不到我要找的东西

我假设我们可以通过url.py实现这一点,比如指定任何参数或类似的东西,使特定视图绕过身份验证,而不必更改代码函数

像这样的事情:

from some_package import some_view

urlpatterns = [
    path('view/',some_view)
]
from some_package import some_view

    urlpatterns = [
        path('view/',some_view,"some_parameter") #passing someparameter from here or something like that
    ]
有可能我在找什么吗?提前感谢:)

您没有尝试:

from rest_framework.permissions import AllowAny
from rest_framework.decorators import authentication_classes, permission_classes

@authentication_classes((AllowAny, ))
@permission_classes((AllowAny, ))
def method()

您可以覆盖默认身份验证类以跳过特定URL的身份验证

例如:

class CustomIsAuthenticated(IsAuthenticated):

    def has_permission(self, request, view):
        # make a list of public urls
        if request.path in PUBLIC_URLS:
            return True
        return super().has_permission(request, view)
您必须创建一个绕过身份验证的
公共URL
列表

现在在rest框架设置中的
DEFAULT\u PERMISSION\u类中使用这个类。并删除默认的
IsAuthenticated

尽管我推荐装饰师的方法。 检查文档:


Decorators方法更为详细,通过查看函数可以确定它是否是公共的。

因此,第三方视图最合适的方法是通过在
URL.py中定义decorator来使用它们:

案例1 我假设
some\u view
是从
rest\u framework.views.APIView
继承的类:

url.py

从django.url导入路径
从rest\u framework.decorators导入权限类、身份验证类
从rest\u framework.permissions导入允许
从某些\u包导入某些\u视图
URL模式=[
路径(“”,身份验证类([])(权限类([AllowAny])(某些视图))。作为视图()
]
案例2 我假设
some_view
是一个简单的Django视图函数,您需要为
GET
方法定义它:

url.py

从django.url导入路径
从rest\u framework.decorators导入api\u视图、权限\u类、身份验证\u类
从rest\u framework.permissions导入允许
从某些\u包导入某些\u视图
URL模式=[
路径(“”,api_视图(['GET'])(身份验证类([])(权限类([AllowAny])(某些视图)))
]
案例3
我假设
some\u view
是一个
api\u view
DRF视图函数。这是最困难的部分,也可能是最不可能的部分,因为您必须取消装饰先前的
api\u视图。如果视图函数是用
api\u view
修饰的,那么它已经被转换成Django视图函数,所以
permission\u classes
authentication\u classes
都不能附加到类中:

我不知道有什么方法可以这样做。最好是包装视图(即编写自己的视图)并设置
身份验证\u类
。您也可以删除
DEFAULT\u AUTHENTICATION\u类
DEFAULT\u PERMISSION\u类
,将其移动到您自己的父类中进行身份验证和授权,然后在视图中继承。然后您的第三方视图将不会默认为您在
settings.py
中提供的视图,因为您没有提供任何内容。是的,我可以这样做,但这将导致进行更多更改,与其按照您的建议执行操作,不如重写该函数并为重写的函数指定
身份验证\u类
,然后从该重写的函数调用原始函数@这就是我第一次评论的意思。老实说,如果你只是导入了一个视图,我认为这是一种方法。我已经尝试过这种覆盖方法。这对我很有效。这样做是个好主意。我很久以前就这么做了。