2016-10-20 43 views
0

我有Django Rest Framework使用令牌身份驗證。我有一個以下url url(r'^api/auth/', views.obtain_auth_token),它返回我的令牌。DRF - 擴展獲取身份驗證令牌

我需要做的是執行一些數據庫邏輯,當用戶執行獲取令牌的授權時。我需要查詢db並在那裏做一些事情。

在我看來,我有辦法覆蓋默認行爲,並添加一些自定義邏輯obtain_auth_token

我該怎麼做?

回答

1

來自Rest Framework的ObtainAuthToken爲特定用戶獲取或創建一個令牌,然後在Response中發送它,所有這些行爲都是在post方法中完成的。

文檔說:

如果需要obtain_auth_token視圖的定製版本,你可以通過重寫ObtainAuthToken視圖類,並使用在您的網址,而不是CONF這樣做。

因此,您可以重寫post方法,甚至創建自己的APIView來創建令牌並添加所需的行爲。爲了做到這一點,改變你的網址:

url(r'^api/auth/', views.custom_obtain_token) 

而且在views.py:

class CustomObtainToken(APIView): 
    ... 
    def post(self, request): 
     <your logic> 
     <get token n your own way or using DRF way> 
     return Response({'token': token}) 
custom_obtain_token = CustomObtainToken.as_view() 
+0

對不起,可以請你澄清一下,如何創建令牌DRF方式? –

+0

驗證序列化程序並驗證用戶是否存在或已通過身份驗證後,可以執行'token,created = Token.objects.get_or_create(user = user)'。這是DRF做到這一點的方式。 'Token'是一個模型,您可以從'rest_framework.authtoken.models'中導入它。 – user3080294

+0

如何驗證序列化程序並驗證用戶是否存在?如果用戶名爲.exists(),請爲用戶模型創建一個查詢集並進行切換? –

相關問題