DRF中的用户认证需要很长时间

2024-06-26 00:25:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我将ModelViewSetIsAuthenticatedOrReadOnly权限类一起使用,如下所示:

class PostViewSet(viewsets.ModelViewSet, MarkdownToHTML):
    permission_classes = (IsAuthenticatedOrReadOnly,)

当我在browsable API中调用这个视图时,数据返回时间大约为1100毫秒(已经太长了),但是当我从前端UI调用它时,调用需要6000-7000毫秒

调用同一视图的这两种方法之间的唯一区别是,我正在从我的前端UI应用程序传递一个json令牌。当我注释掉令牌头时,响应将在大约1秒后返回,与可浏览API中的时间相同

这个简单的身份验证步骤怎么可能需要5秒钟以上

以下是权限类:

class IsAuthenticatedOrReadOnly(BasePermission):
    """
    The request is authenticated as a user, or is a read-only request.
    """

    def has_permission(self, request, view):
        return (
            request.method in SAFE_METHODS or
            request.user and
            request.user.is_authenticated
        )

Tags: or视图api权限uiisrequest时间
1条回答
网友
1楼 · 发布于 2024-06-26 00:25:48

我在一个项目中遇到过类似的问题。我会告诉你我的经验,以试图帮助你,我不能告诉你什么是确切的问题,但我会张贴的东西,我检查时,我有我的

问题是,解码身份验证令牌是一项非常昂贵的操作,因此您必须检查:

  1. 在您的视图中,这样的令牌(如果提供)被解码了多少次
  2. 你能使用cookies缓存身份验证令牌,设置过期时间吗
  3. 这个令牌在服务器上来回发送多少次

另一方面,记住DRF会根据标记的长度(以及出现的次数)将json转换为python对象(特别是字典),这也是一个非常昂贵的操作

相关问题 更多 >