2013-11-23 44 views
1

我想讓當前用戶對象可用,以便我的AJAX前端可以確定用戶是否已登錄。無法使用Django Rest Framework序列化AnonymousUser對象 - 缺少屬性

當前用戶是登錄人員的dajngo.contrib.auth.User或未登錄人員的AnonymousUser的實例。串行器是如下,

class UserSerializer(serializers.HyperlinkedModelSerializer): 
    comments = serializers.HyperlinkedRelatedField(many = True, view_name = 'comment-detail') 
    class Meta: 
     model = User 
     fields = ('url', 'username', 'comments', 'first_name', 'last_name') 

用下面的視圖用於登錄的用戶,即它補丁上的「註釋」字段,併發送它關閉

class CurrentUserView(APIView): 
    ''' 
    Returns the current user, logged in or not 
    ''' 
    def get(self, request, *args, **kwargs): 
     serializer = serializers.UserSerializer(request.user) 
     return Response(serializer.data) 

此串行器工作正常。但是對於AnonymousUser它扼殺。它聲稱沒有方法的「評論」(沒有,但它應該補丁的權利?),如果我從fields刪除'評論'的要求,然後抱怨沒有'first_name'。

這是AnonymousUser不是django.contrib.auth.User的實例嗎?如果是這樣,我該如何補救?

我意識到我可以檢查視圖級別並返回一個自定義數據對象,如果它是AnonymousUser的實例,但有沒有更好的方法來做到這一點?

回答

1

這是更好地連載這樣,移動認證檢查到後端(它屬於):

{ 
    'is_logged_in': True, 
    'user': <<serialized user>>, 
} 

和:

{ 
    'is_logged_in': False, 
    'user': None, # or something else like this 
} 

它在許多API通用的解決方案。元數據位於JSON和密鑰下的可能對象之上。您可以通過檢查.is_authenticated()來檢查用戶是否爲AnonymousUserUser - 它是專門爲此目的而創建的(與 AnonymousUser比較)。

0

修改你的觀點一樣顯示在下面

class CurrentUserView(APIView): 
    ''' 
    Returns the current user, logged in or not 
    ''' 
    def get(self, request, *args, **kwargs): 
     if request.user.is_authenticated(): 
      serializer = serializers.UserSerializer(request.user) 
      return Response(serializer.data) 
     else: 
      return Response([])` 
相關問題