#python #django
#python #django
Вопрос:
В настоящее время возникают трудности с возвратом токена в моем представлении регистрации.
Как я могу это исправить, чтобы create от UserSerializer мог возвращать токен и имя пользователя?
View.py
@permission_classes([AllowAny])
class UserCreate(generics.CreateAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer
Serializers.py
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('username', 'password')
extra_kwargs = {'password': {'write_only': True}}
def create(self, validated_data):
password = validated_data.pop('password')
user = User(**validated_data)
user.set_password(password)
user.save()
token, _ = Token.objects.get_or_create(user=user)
return Response(
{
'username': validated_data['username'],
'token': token.key,
},
status=HTTP_200_OK
)
Ошибка
AttributeError: Got AttributeError when attempting to get a value for field `username` on serializer `UserSerializer`.
The serializer field might be named incorrectly and not match any attribute or key on the `Response` instance.
Original exception text was: 'Response' object has no attribute 'username'.
[13/Nov/2020 20:26:44] "POST /account/register HTTP/1.1" 500 120116
Комментарии:
1. Сообщение об ошибке
username
отсутствует в данных.2. Вот мой запрос:
http post http://127.0.0.1:8000/account/register username='test37' password='password'
3. Вставьте
print(validated_data)
свой сериализатор и посмотрите, есть ли все необходимые поля.4. { «имя пользователя»: «test40» }
Ответ №1:
В итоге я поместил его в сериализатор:
class UserCreate(generics.CreateAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer
def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
token, created = Token.objects.get_or_create(user=serializer.instance)
return Response({'token': token.key, 'username': serializer.instance.username}, status=HTTP_201_CREATED)```