我正在将ModelViewSet
权限类与IsAuthenticatedOrReadOnly
一起使用,就像这样:
class PostViewSet(viewsets.ModelViewSet, MarkdownToHTML):
permission_classes = (IsAuthenticatedOrReadOnly,)
当我在可浏览的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
)
答案 0 :(得分:2)
我在一个项目中遇到过类似的问题。我会告诉您我的经验以便尝试提供帮助,我无法告诉您确切的问题是什么,但是我会把我有我时检查过的东西贴出来。
问题是解码auth令牌是一项非常昂贵的操作,因此您必须检查:
另一方面,请记住,DRF会根据令牌的长度(以及令牌发生的次数)将json转换为python对象(特别是字典),这也是非常昂贵的操作。