2015-05-01 4 views
1

Я использую Django 1.8 и Python 3.4.0. Я использую DjangoRestFramework. Я хочу создать объект User. ПоDjangoRestFramework - View может создать объект пользователя без ввода обязательных полей

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 созданный код статуса и объект был успешно создан. Поскольку «Пользователь класса» упомянул, что поле электронной почты является обязательным, не должен ли он возвращать код состояния с плохим кодом 400?

ответ

1

С «класс пользователя» отметил, что поле электронной почты является обязательным

Что по электронной почте поле?

Вы только сообщили структуре Django REST, что есть поле username и password, так что это все, что он ожидает и проверяет. Если вы хотите, чтобы поле email было необходимо, вы должны включить его в Meta.fields на свой сериализатор.

Сторона примечания: email isn't actually a required field.

+0

О, вы правы, это не обязательное поле. Любая идея, почему в ссылке у вас есть и в «классе User (AbstractUser)», который находится в файле django/contrib/auth/models.py - он упоминает, что «требуется имя пользователя, пароль и адрес электронной почты. . "? Это опечатка в Django? Примечание: в строке 411 в связанном документе говорится: «REQUIRED_FIELDS = ['email']», но я просмотрел остальную часть файла и ничего не делает с переменной «REQUIRED_FIELDS». – user2719875

+0

@ user2719875 Это «требуется», если вы хотите использовать его во встроенных функциях электронной почты, но в противном случае это выглядит как опечатка. –

+0

интересный. Хорошо, так что я попытался сейчас, так это то, что в моем serializers.py я сделал «поля = (« имя пользователя »,)» для целей тестирования. Затем я попытался создать пользовательский объект, выполнив «curl -X POST localhost: 8000/users/-d» username = firstUser », и он успешно создал объект пользователя (даже если в models.py« class User »говорится, что требуется поле пароля). Это правильное поведение? Я думал, что Django не позволит мне создать объект, если исходная модель имеет обязательное поле, которое не вводится при создании объекта. Разве база данных не позволяет пустым паролем? – user2719875

Смежные вопросы