如何从Django Rest Framework JWT令牌获取用户名

如何从Django Rest Framework JWT令牌获取用户名,django,django-rest-framework,jwt,Django,Django Rest Framework,Jwt,我使用的是Django Rest框架,其中包含了一个名为的第三方包。当您向某个路由发送用户名/密码时,它将返回一个令牌。然后需要令牌才能获得某些路由的权限。但是,如何从令牌中获取用户名?我浏览了所有的软件包文档,并浏览了StackOverflow。这是一个JSON Web令牌,我假设有一个类似于username=decode\u令牌(令牌)的方法,但我还没有找到这样的方法 基本上你可以做到这一点 username = request.user.username 对于使用Django(2.0.1

我使用的是Django Rest框架,其中包含了一个名为的第三方包。当您向某个路由发送用户名/密码时,它将返回一个令牌。然后需要令牌才能获得某些路由的权限。但是,如何从令牌中获取用户名?我浏览了所有的软件包文档,并浏览了StackOverflow。这是一个JSON Web令牌,我假设有一个类似于
username=decode\u令牌(令牌)
的方法,但我还没有找到这样的方法

基本上你可以做到这一点

username = request.user.username
对于使用Django(2.0.1)、djangorestframework(3.7.7)、djangorestframework jwt(1.11.0)的我来说

我必须执行以下操作才能从令牌中重新使用用户:

        token = request.META.get('HTTP_AUTHORIZATION', " ").split(' ')[1]
        print(token)
        data = {'token': token}
        try:
            valid_data = VerifyJSONWebTokenSerializer().validate(data)
            user = valid_data['user']
            request.user = user
        except ValidationError as v:
            print("validation error", v)
或者您可以编写一个中间件,根据用户的令牌设置用户

对我来说,这已经不再维持了。 因此,我使用了
rest\u框架\u simplejw

from rest_framework_simplejwt.backends import TokenBackend
token = request.META.get('HTTP_AUTHORIZATION', " ").split(' ')[1]
data = {'token': token}
   try:
      valid_data = TokenBackend(algorithm='HS256').decode(token,verify=False)
      user = valid_data['user']
      request.user = user
   except ValidationError as v:
      print("validation error", v)

您在请求中有用户对象。或者你不是在视图中做这件事?我是在视图中做这件事的,但我是Django的新手,所以我不完全理解它是如何工作的。你能详细说明一下吗?添加你的视图代码@你为什么要编辑我的代码。我使用的是驼峰式编码。真的有必要用ux?编码吗?。“没有必要,”普拉哈尔特维迪读了pep8指南。这是python社区的惯例是的,我同意这一点。但真的有必要吗?还有比这更好的事情要做。@PrakharTrivedi您正在回答python初学者的问题。有必要编写符合python指南的答案,因为他会复制和粘贴您的代码,他会认为这种编码风格是可以的,这不适合我们的社区。@Addict这可以在任何地方使用,在传递
请求
对象的地方,但通常这是在视图中完成的。我会出错。请您共享您的整个中间件文件。对不起,这不是用户要求的。但是你可以访问链接,它有整个中间件。