2016-03-03 200 views
0

我在我的應用程序中使用Django REST框架。我需要認證,但不是默認的認證。我有一個模型:Django自定義身份驗證

class Worker(models.Model): 
    token = models.CharField(...) 
    ip = models.GenericIPAddressField(...) 
    created_date = models.DateTimeField(...) 
    last_update = models.DateTimeField(...) 

工人通過我的API發送消息,查看WorkerView從Django的REST框架的APIView繼承。令牌被髮送請求中的頭:

class WorkerView(APIView): 
    def post(self, request): 
     # some not important code 

我有一個認證方法:

def authenticate(request): 
    try: 
     ip = request.META.get("REMOTE_ADDR", None) 
     token = request.META.get("HTTP_AUTHORIZATION", None) 
    ... 

我想到了兩個解決方案:

  1. 做一個mixin類,在我的WorkerView繼承它:

    class WorkerView(AuthenticationMixin, APIView) 
        ... 
    
  2. 從我的身份驗證方法,使一類的裝飾,並使用它像這樣:

    @authenticate 
    class WorkerView(APIView) 
    

但在這兩種情況下,我需要傳遞的請求參數進行驗證的方法。 如何做到這一點?或者,也許有更好的解決我的問題?

回答

0

爲什麼你不創建一個定義在這裏的自定義認證類? http://www.django-rest-framework.org/api-guide/authentication/#custom-authentication

+0

因爲我需要在用登錄名/密碼登錄的用戶和使用令牌的用戶之間進行分隔。我不想mofidy /擴展用戶模型。相反,我想授權我的模型對象,而不是用戶對象。我知道,我使用自定義身份驗證。如果我想使用它,我不會問。 – hebius

+0

我在這裏看不到問題。您可以根據需要一次使用多個身份驗證類,並且創建一個自定義身份驗證類是完成您的任務的好方法。 –