当前位置 博文首页 > 小龙狗的博客:DjangoRestFramework-simplejwt中‘str‘ object
Python v3.6.6
Django v3.2.4
djangorestframework v3.12.4
djangorestframework-simplejwt v4.4.0
运行 runserver
命令后测试接口时后台打印错误如下
Traceback (most recent call last):
File "D:\Program Files\Python36\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
File "D:\Program Files\Python36\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "D:\Program Files\Python36\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
return view_func(*args, **kwargs)
File "D:\Program Files\Python36\lib\site-packages\django\views\generic\base.py", line 70, in view
return self.dispatch(request, *args, **kwargs)
File "D:\Program Files\Python36\lib\site-packages\rest_framework\views.py", line 509, in dispatch
response = self.handle_exception(exc)
File "D:\Program Files\Python36\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
self.raise_uncaught_exception(exc)
File "D:\Program Files\Python36\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
raise exc
File "D:\Program Files\Python36\lib\site-packages\rest_framework\views.py", line 506, in dispatch
response = handler(request, *args, **kwargs)
File "D:\Program Files\Python36\lib\site-packages\rest_framework_simplejwt\views.py", line 27, in post
serializer.is_valid(raise_exception=True)
File "D:\Program Files\Python36\lib\site-packages\rest_framework\serializers.py", line 220, in is_valid
self._validated_data = self.run_validation(self.initial_data)
File "D:\Program Files\Python36\lib\site-packages\rest_framework\serializers.py", line 422, in run_validation
value = self.validate(value)
File "D:\Program Files\Python36\lib\site-packages\rest_framework_simplejwt\serializers.py", line 75, in validate
data['refresh'] = str(refresh)
File "D:\Program Files\Python36\lib\site-packages\rest_framework_simplejwt\tokens.py", line 82, in __str__
return token_backend.encode(self.payload)
File "D:\Program Files\Python36\lib\site-packages\rest_framework_simplejwt\backends.py", line 43, in encode
return token.decode('utf-8')
AttributeError: 'str' object has no attribute 'decode'
方法1
升级 djangorestframework-simplejwt
版本至 4.6.0+
方法2
打开
D:\Program Files\Python36\lib\site-packages\rest_framework_simplejwt\backends.py
文件,编辑第43行。将
return token.decode('utf-8')
修改为如下即可
return token
这是 Python3 相对 Python2 的升级,关于这个问题可参考