0

我使用的是內置在位於Django REST框架 - 如何創建UserSerializer對象但不返回密碼?

django.contrib.auth.models 

用戶模型這是我serialiers.py文件:

from rest_framework import serializers 

from django.contrib.auth.models import User 

class UserSerializer(serializers.ModelSerializer): 

    class Meta: 
     model = User 
     fields = ('username',) 

現在,我想的是,當我序列化一個用戶對象,像這樣:

user = User.objects.get(pk=1) 
serialzer=UserSerializer(user) 
return Response(serializer.data) 

我只想將「用戶名」作爲JSON對象返回到前端(我不想返回密碼)。這工作得很好,但是當我嘗試使用這個視圖中創建一個用戶對象:

@api_view(['POST']) 
def users(request): 
    """ 
    Create a new user. 
    """ 
    if request.method == 'POST': 
     serializer = UserSerializer(data=request.DATA) 
     if serializer.is_valid(): 
      serializer.save() 
      return Response(serializer.data, status=status.HTTP_201_CREATED) 
     else: 
      return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) 

用戶對象可以在沒有用戶輸入的密碼來創建(我試圖做

curl -X POST localhost:8000/user -d "username=testUser" 
# the above URL (localhost:8000/user) calls the "users" view 

併成功創建一個只有用戶名的用戶)。我如何創建它,以便在創建用戶時,只有在給出有效的用戶名和密碼時才能成功創建用戶(因爲位於django.contrib.auth.models中的「用戶」模型需要有效的用戶名和密碼)?

回答

-1

從返回的成功響應

serializer.data.pop('password', None) 

,我忘了,如果數據之前或者響應之後連載如果之前序列化,那麼一定要使用JSON庫轉換,刪除密碼鍵,重新序列化彈出它,然後發送。

+0

當我使用該行代碼時,它首先給我一個錯誤,指出pop只需要1個參數。我刪除「無」,並嘗試「serializer.data.pop('密碼')」現在它給我一個TypeError說「ExceptionValue:對象不能被解釋爲一個整數」。 – user2719875

+1

忽略這個不起作用的事實,如果有人忘記在數據傳回之前忘記從數據中彈出它,它仍然揭示了散列的大門。你應該使用'write_only'字段,就像我在[重複問題](http://stackoverflow.com/q/27468552/359284)中解釋的那樣。 –

+0

尼斯不知道密碼上有這個選項,如果你將數據轉儲到python然後重新進行串行化,但我的解決方案不起作用,但作品並不意味着好的做法gj。 – Mikeec3

相關問題