1
我正在使用Django 1.8和Python 3.4.0。我正在使用DjangoRestFramework。我想創建一個用戶對象。據DjangoRestFramework - 視圖能夠創建一個用戶對象,沒有任何輸入的必填字段
django/contrib/auth/models.py
它說
class User(AbstractUser):
"""
Users within the Django authentication system are represented by this model.
Username, password and email are required. Other fields are optional.
"""
我serializers.py文件
現在,我有:
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('username', 'password')
,在我的views.py文件,我有:
@api_view(['GET', 'POST'])
def user_list(request):
"""
List all users, or 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)
在我的urls.py中我有:
url(r'^users$', 'user_list', name='user_list'),
我跑的服務器,然後打開了終端,做
curl -X POST localhost:8000/users/ -d "username=firstUser&password=firstPassword"
它返回一個201 Created狀態代碼和對象已成功創建。由於「類用戶」提到電子郵件字段是強制性的,它不應該返回400個錯誤的請求狀態碼嗎?
哦,你是對的,它不是必填字段。任何想法爲什麼在你有的鏈接和「class User(AbstractUser)」 - 它位於文件django/contrib/auth/models.py - 它提到「用戶名,密碼和電子郵件是必需的,其他字段是可選的。「?這是Django中的拼寫錯誤嗎?注意:在你鏈接的文檔的第411行,它表示「REQUIRED_FIELDS = ['email']」,但我查看了文件的其餘部分,並且它對「REQUIRED_FIELDS」變量沒有任何作用。 – user2719875
@ user2719875如果您想要使用內置的電子郵件功能,則它是「必需的」,但否則它看起來可能是拼寫錯誤。 –
有趣。好吧,所以我現在嘗試的是在我的serializers.py中,爲了測試的目的,我創建了「fields =('username',)」。然後,我嘗試通過執行'curl -X POST localhost:8000/users/-d「username = firstUser」'創建一個用戶對象,併成功創建了用戶對象(即使在models.py「class User」密碼字段是必需的)。這是正確的行爲?我認爲Django不允許我創建一個對象,如果原始模型具有實例化對象時未輸入的必填字段。數據庫不允許空白密碼? – user2719875