假设我想注册一个用户(我使用位于django.contrib.auth.models中的用户模型)。假设这是我的serializers.py:
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('username', 'password', 'email', )
以下观点之间的区别是什么,以及在创建用户时建议使用哪一个?
查看A:
def createUser(request):
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)
查看B:
def createUser(request):
serializer = UserSerializer(data=request.DATA)
if serializer.is_valid():
user = User.objects.create_user(
email = serializer.init_data['email'],
username = serializer.init_data['username'],
password = serializer.init_data['password'],
)
return Response(serializer.data, status=status.HTTP_201_CREATED)
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
答案 0 :(得分:5)
这些都不是完美的。但查看A 看起来很有希望。
User
创建不只是User.save
,而是您必须调用User.create_user
方法。User.create_user
来创建用户的正确方法,但是,这些视图包含逻辑,其实际上应该是抽象在{{ 1}}方法。要解决此问题,您必须更改Serializer.save()
方法的行为。查看documentation,Serializer.save()
,将调用Serializer.save()
或Serializer.create()
。
总之,我们必须覆盖 Serializer.update()
来创建用户,并使用查看A 。
Serializer.create()