2014-09-20 76 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