Я использую 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?
О, вы правы, это не обязательное поле. Любая идея, почему в ссылке у вас есть и в «классе User (AbstractUser)», который находится в файле django/contrib/auth/models.py - он упоминает, что «требуется имя пользователя, пароль и адрес электронной почты. . "? Это опечатка в Django? Примечание: в строке 411 в связанном документе говорится: «REQUIRED_FIELDS = ['email']», но я просмотрел остальную часть файла и ничего не делает с переменной «REQUIRED_FIELDS». – user2719875
@ user2719875 Это «требуется», если вы хотите использовать его во встроенных функциях электронной почты, но в противном случае это выглядит как опечатка. –
интересный. Хорошо, так что я попытался сейчас, так это то, что в моем serializers.py я сделал «поля = (« имя пользователя »,)» для целей тестирования. Затем я попытался создать пользовательский объект, выполнив «curl -X POST localhost: 8000/users/-d» username = firstUser », и он успешно создал объект пользователя (даже если в models.py« class User »говорится, что требуется поле пароля). Это правильное поведение? Я думал, что Django не позволит мне создать объект, если исходная модель имеет обязательное поле, которое не вводится при создании объекта. Разве база данных не позволяет пустым паролем? – user2719875