2015-05-01 30 views
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個錯誤的請求狀態碼嗎?

回答

1

自「類用戶」中提到的電子郵件字段是強制性的

什麼電子郵件領域?

你只告訴Django REST框架有一個usernamepassword字段,這是它所期望和驗證的。如果你想要email字段是必需的,你將不得不在你的序列化器中包含Meta.fields

附註:email isn't actually a required field

+0

哦,你是對的,它不是必填字段。任何想法爲什麼在你有的鏈接和「class User(AbstractUser)」 - 它位於文件django/contrib/auth/models.py - 它提到「用戶名,密碼和電子郵件是必需的,其他字段是可選的。「?這是Django中的拼寫錯誤嗎?注意:在你鏈接的文檔的第411行,它表示「REQUIRED_FIELDS = ['email']」,但我查看了文件的其餘部分,並且它對「REQUIRED_FIELDS」變量沒有任何作用。 – user2719875

+0

@ user2719875如果您想要使用內置的電子郵件功能,則它是「必需的」,但否則它看起來可能是拼寫錯誤。 –

+0

有趣。好吧,所以我現在嘗試的是在我的serializers.py中,爲了測試的目的,我創建了「fields =('username',)」。然後,我嘗試通過執行'curl -X POST localhost:8000/users/-d「username = firstUser」'創建一個用戶對象,併成功創建了用戶對象(即使在models.py「class User」密碼字段是必需的)。這是正確的行爲?我認爲Django不允許我創建一個對象,如果原始模型具有實例化對象時未輸入的必填字段。數據庫不允許空白密碼? – user2719875

相關問題