2015-05-21 59 views
0

如果提供所有用戶名,密碼和電子郵件字段,我想在django-rest-auth中註冊用戶。 (我想實現令牌認證以從服務器獲得JSON響應。)電子郵件字段必填django.contrib.auth

django.contrib.auth.User中的默認電子郵件字段是可選的。但是我想根據需要設置電子郵件地址以便在數據庫中註冊,以便在沒有電子郵件的情況下發出POST請求時用戶收到HTTP錯誤響應。

在項目中,我通過以下代碼註冊新用戶。

class UserSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = User 
     fields = ('id', User.USERNAME_FIELD, "password", 'full_name', 
        'is_active', 'links',) 
     write_only_fields = ('password',) 
     read_only_fields = ('id',) 

    def create(self, validated_data): 
     print("Validated Data",validated_data) 
     if 'email' in validated_data: 
      user = get_user_model().objects.create(
       username=validated_data['username'] 
      ) 
      user.set_email(validated_data['email']) 
      user.set_password(validated_data['password']) 
      user.save() 
      email = EmailMessage('Hello', 'World', 
           to=[validated_data['email']]) 
      email.send() 
      user.is_active=False 
      return user 
     else: 
      return None 

然而,上述給出:

創建()沒有返回一個對象實例

如何設置電子郵件字段爲必填字段?

+0

有兩件事:完整的回溯將會非常有用,問題在於你在'create'過程中進行驗證(並且因爲它而返回'None')。你_must_從create方法返回一個用戶對象。 –

+0

「完全回溯」是什麼意思?你能提供任何有關的文件嗎? 稍後我在UserSerializer中使用以下行。 電子郵件= EmailField(必需= True) 這種方式工作。這是正確的方法嗎? – saikat

回答

0

我想在django-rest-auth中註冊一個用戶,如果提供了所有的用戶名,密碼和電子郵件字段。

要求對在Django REST框架串行一個字段中的正確的方法是set required=True when initializing the field,或using the extra_kwargs parameter將其設置在自動生成的字段。

django.contrib.auth.User中的默認電子郵件字段是可選的。但我想根據需要設置電子郵件地址以便在數據庫中註冊,以便在沒有電子郵件的情況下發出POST請求時用戶將收到HTTP錯誤響應。

這意味着默認情況下不需要自動生成的字段,但仍然可以用required=True覆蓋它。

然而,上述給出:

創建()沒有返回一個對象實例

這是因爲你沒有從create方法返回一個User例如,就像它在錫上說的一樣。具體而言,如果不包含email字段,則返回NoneNone不是User實例,DRF警告您您做錯了事。