django rest registration api error: this field is required
django rest registration api error: this field is required
你好,我想为我的 django rest api 创建一个简单的注册 api
但是当我想用 curl 测试注册时,我总是得到这个错误:
{"username":["This field is required."],"password":["This field is required."]}
这是我的 curl 命令:
curl --request POST --url http://localhost:8000/auth/register/ --header 'content-type: application/json' --data '{"username": "user1","password": "hunter2"}'
views.py RegistrationApi
class RegistrationAPI(generics.GenericAPIView):
serializer_class = CreateUserSerializer
def post(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
user = serializer.save()
return Response({
"user": UserSerializer(user, context=self.get_serializer_context()).data,
"token": AuthToken.objects.create(user)
})
serializers.py
class CreateUserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('id', 'username', 'password')
extra_kwargs = {'password': {'write_only': True}}
def create(self, validated_data):
user = User.objects.create_user(validated_data['username'],
None,
validated_data['password'])
return user
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('id', 'username')
也许序列化程序有问题?我已经试过了所以弄清楚问题出在哪里但是我找不到它
试试这个:
class CreateUserSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = User
fields = ('id', 'username', 'email', 'password')
extra_kwargs = {'password' : {'write_only': True}}
def create(self, validated_data):
user = User.objects.create_user(**validated_data)
return user
或参考link
你好,我想为我的 django rest api 创建一个简单的注册 api 但是当我想用 curl 测试注册时,我总是得到这个错误: {"username":["This field is required."],"password":["This field is required."]}
这是我的 curl 命令:
curl --request POST --url http://localhost:8000/auth/register/ --header 'content-type: application/json' --data '{"username": "user1","password": "hunter2"}'
views.py RegistrationApi
class RegistrationAPI(generics.GenericAPIView):
serializer_class = CreateUserSerializer
def post(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
user = serializer.save()
return Response({
"user": UserSerializer(user, context=self.get_serializer_context()).data,
"token": AuthToken.objects.create(user)
})
serializers.py
class CreateUserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('id', 'username', 'password')
extra_kwargs = {'password': {'write_only': True}}
def create(self, validated_data):
user = User.objects.create_user(validated_data['username'],
None,
validated_data['password'])
return user
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('id', 'username')
也许序列化程序有问题?我已经试过了所以弄清楚问题出在哪里但是我找不到它
试试这个:
class CreateUserSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = User
fields = ('id', 'username', 'email', 'password')
extra_kwargs = {'password' : {'write_only': True}}
def create(self, validated_data):
user = User.objects.create_user(**validated_data)
return user
或参考link