Witam,
Mam pytanie do bardziej doświadczonych użytkowników. Mianowicie potrzebuję uzyskać w odpowiedzi na zalogowanie dane użytkownika logującego się.
Niestety jestem zbyt zielony i nie wiem od czego się zabrać. Podejrzewam, że jest to prosta rzecz a jednak sprawia mi problem.
oto fragment kodu z views.py, oraz fragment z serializatora
class UserLoginView(APIView):
renderer_class = (JSONRenderer, BrowsableAPIRenderer,)
permission_classes = (permissions.AllowAny, )
serializer_class = UserLoginSerializer
def post(self, request, *args, **kwargs):
data = request.data
serializer = UserLoginSerializer(data=data)
if serializer.is_valid(raise_exception=True):
new_data = serializer.data
auth.login(request, User.objects.get(username=data['username']))
return Response(new_data, status=status.HTTP_200_OK)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
class UserRegistrationSerializer(serializers.ModelSerializer):
first_name = serializers.CharField(required=True)
last_name = serializers.CharField(required=True)
email = serializers.EmailField(
required=True,
validators=[UniqueValidator(queryset=User.objects.all())]
)
username = serializers.CharField(
required=True,
validators=[UniqueValidator(queryset=User.objects.all())]
)
password = serializers.CharField(min_length=8)
password_confirmation = serializers.CharField(required=True)
class Meta:
model = User
fields = ['username', 'first_name', 'last_name', 'password', 'password_confirmation', 'email',]
extra_kwargs = {"password":{"write_only":True}}
def validate(self, data):
passwd = data['password']
passwd_confirm = data['password_confirmation']
if not passwd == passwd_confirm:
raise serializers.ValidationError("Passwords are not the same!")
return data
def create(self, validated_data):
user = User.objects.create_user(validated_data['username'], validated_data['email'])
user.set_password(validated_data['password'])
setattr(user, 'first_name', validated_data['first_name'])
setattr(user, 'last_name', validated_data['last_name'])
user.save()
return user
class UserLoginSerializer(serializers.ModelSerializer):
username = serializers.CharField()
class Meta:
model = User
fields = ['username', 'password']
extra_kwargs = {"password":{"write_only":True}}
def validate(self, data):
user = auth.authenticate(username=data['username'], password=data['password'])
if not user:
raise serializers.ValidationError("Username or password is invalid!")
if not user.is_active:
raise serializers.ValidationError("This user is inactive!")
return data
Z góry dzięki za każdą podpowiedź!