我已经用pip安装了JWT。现在我想覆盖方法
def jwt_response_payload_handler(token, user=None, request=None):
return { 'token': token, }
是
def jwt_response_payload_handler(token, user=None):
return {
'token': token,
'user': UserSerializer(user).data
}
我应该在哪里覆盖它?我是否在我自己的应用程序中覆盖该方法,但在何处以及如何?或者我是否修改了库中的原始代码?
我已经修改了库中的方法并且工作正常,但我认为这不是正确的方法。有人能帮我吗?感谢
答案 0 :(得分:20)
我发现成功的做法如下:
myapp.view.py文件:
def jwt_response_payload_handler(token, user=None, request=None):
return {
'token': token,
'bunny': 'fu fu'
}
setting.py文件:
JWT_AUTH = {
'JWT_RESPONSE_PAYLOAD_HANDLER':
#'rest_framework_jwt.utils.jwt_response_payload_handler',
'myapp.views.jwt_response_payload_handler',
}
在任意位置实现函数jwt_response_payload_handler
,但要确保它位于python路径中。例如,在此文件中:myapp.views.py
然后在您的settings.py文件中,使用您刚刚创建的JWT_AUTH
的新位置更新JWT_RESPONSE_PAYLOAD_HANDLER
字典键jwt_response_payload_handler
。
一旦掌握了正在发生的事情,您就可以根据自己的需要调整解决方案。例如,我不建议将覆盖的函数保留在views.py文件中。这只是为了展示目的而简单。
将jwt_response_payload_handler
函数放在您创建的“helper.py”文件中可能是一个简单的解决方案。
答案 1 :(得分:0)
jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER
payload = jwt_payload_handler(user)
token = jwt_encode_handler(payload)
答案 2 :(得分:-1)
创建自己的处理程序方法后,您必须在JWT_AUTH设置中更改它。查看文档中的Additional Settings部分。