2015-04-06 32 views
8

我用pip安裝了智威湯遜。現在我想覆蓋的方法我在哪裏可以重寫jwt_response_payload_handler方法?

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 
    } 

我應該在哪裏重寫呢?我是否在自己的應用程序中重寫該方法,但是在哪裏以及如何?還是修改庫中的原始代碼?

我修改了庫中的方法,它工作正常,但我不認爲這是正確的方法。有人能幫我嗎?謝謝

回答

-1

一旦你創建你自己的處理程序方法,你將不得不在JWT_AUTH設置中改變它。查看文檔中的Additional Settings部分。

+0

事情是我應該在哪裏創建自己的處理程序方法?在我自己的應用程序或JWT庫中?我可以修改庫,然後它可以工作。我不確定的是我應該這樣做,修改庫中的文件? – song 2015-04-07 03:33:02

+0

@song處理程序方法可以在你的sys.path的任何地方使用,通常在你的項目的任何地方都可以,例如:'my_project.utils.jwt_response_payload_handler' – 2015-04-08 11:29:44

+1

@song你不應該編輯已安裝的軟件包。 – 2015-12-21 07:21:54

15

我發現成功執行以下操作:

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_response_payload_handler剛剛創建的新位置更新JWT_AUTH辭典鍵JWT_RESPONSE_PAYLOAD_HANDLER

一旦你掌握了正在發生的事情,你可以調整你的解決方案。例如,我不建議在view.py文件中留下重寫的函數。這僅僅是爲了演示的目的。

也許將jwt_response_payload_handler函數放在您創建的「helper.py」文件中將是一個簡單的解決方案。

+1

這對我非常有幫助。它很簡單,並且清楚地寫在文檔中,但我在那裏沒有理解。謝謝。 – 2016-09-30 02:29:07

+1

簡單而好的解決方案。 – Vingtoft 2016-12-30 09:46:28

+0

適用於2018年遇到此問題的任何人的更新。您也必須在JWT_AUTH中擁有'JWT_PAYLOAD_GET_USER_ID_HANDLER': 'rest_framework_jwt.utils.jwt_get_user_id_from_payload_handler',否則覆蓋將不起作用。 – 2018-02-15 21:09:33

相關問題