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中的「用戶」模型需要有效的用戶名和密碼)?
當我使用該行代碼時,它首先給我一個錯誤,指出pop只需要1個參數。我刪除「無」,並嘗試「serializer.data.pop('密碼')」現在它給我一個TypeError說「ExceptionValue:對象不能被解釋爲一個整數」。 – user2719875
忽略這個不起作用的事實,如果有人忘記在數據傳回之前忘記從數據中彈出它,它仍然揭示了散列的大門。你應該使用'write_only'字段,就像我在[重複問題](http://stackoverflow.com/q/27468552/359284)中解釋的那樣。 –
尼斯不知道密碼上有這個選項,如果你將數據轉儲到python然後重新進行串行化,但我的解決方案不起作用,但作品並不意味着好的做法gj。 – Mikeec3