我在哪里可以覆盖jwt_response_payload_handler方法?

时间:2015-04-06 00:25:57

标签: python django django-rest-framework jwt

我已经用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
    }

我应该在哪里覆盖它?我是否在我自己的应用程序中覆盖该方法,但在何处以及如何?或者我是否修改了库中的原始代码?

我已经修改了库中的方法并且工作正常,但我认为这不是正确的方法。有人能帮我吗?感谢

3 个答案:

答案 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部分。