2014-09-20 75 views
3

我有一個序列化程序和一個像我這樣登錄的視圖。如何使用django-rest-framework創建一個登錄視圖

class LoginView(generics.RetrieveAPIView): 
    serializer_class= LoginSerializer 
    queryset=User.objects.all() 

    error_messages = { 
     'invalid': "Invalid username or password", 
     'disabled': "Sorry, this account is suspended", 
    } 

    def _error_response(self, message_key): 
     data = { 
      'success': False, 
      'message': self.error_messages[message_key], 
      'user_id': None, 
     } 
    def post(self,request): 
     email = request.POST.get('email') 
     password = request.POST.get('password') 
     user = authenticate(email=email, password=password) 
     if user is not None: 
      if user.is_active: 
       login(request, user) 

       return Response(status=status.HTTP_100_OK) 
      return self._error_response('disabled') 
     return self._error_response('invalid') 

和串行:

class LoginSerializer(serializers.ModelSerializer): 
    class Meta: 
     model=User 
     fields=('email','password') 

我的網址:

(r'^login/$',LoginView.as_view()) 

當我運行代碼我得到一個錯誤 在/登錄/ 預計視圖LoginView ImproperlyConfigured是使用名爲「pk」的URL關鍵字參數進行調用。修正你的URL conf,或者在視圖上正確設置.lookup_field屬性。

我目前沒有重定向在我看來。 我做錯了什麼?

+0

請你提供你的'urls.py',你如何重定向到您的登錄頁面。請更新現有的問題。 – Nilesh 2014-09-20 12:39:22

+0

我已經更新了這個問題。 – zacmwa 2014-09-20 13:38:46

回答

1

您使用generic.RetrieveAPIView延伸RetrieveModelMixinGenericAPIView,按照文檔它需要pk或者你必須設置.lookup_field在你的類。

RetrieveAPIView用於getget表示檢索數據並檢索它需要的數據pk

使用另一個類來處理你POST

+0

哪個類使用POST作爲獲取數據的唯一方法?我應該使用什麼課程? – zacmwa 2014-09-20 15:08:56

+0

您正在使用'generics.RetrieveAPIView',請檢查其文檔。 – Nilesh 2014-09-20 16:59:32