
подробное отслеживание
File "/home/tushant/Projects/nepMart/account/api/views.py", line 61, in post
login(request, serializer.data)
File "/home/tushant/.virtualenvs/NepMart/lib/python3.5/site-packages/django/contrib/auth/__init__.py", line 102, in login
if _get_user_session_key(request) != user.pk or (
AttributeError: 'ReturnDict' object has no attribute 'pk'
Serializers.py
class UserLoginSerializer(ModelSerializer):
token = CharField(allow_blank=True, read_only=True)
username = CharField(required=False, allow_blank=True)
# email = EmailField(label='Email Address',required=False, allow_blank=True)
remember = BooleanField(default=True, help_text = ("If checked you will stay logged in for 3 weeks"))
class Meta:
model = User
fields = [
'username',
# 'email',
'password',
'remember',
'token',
]
extra_kwargs = {"password":
{"write_only": True}
}
views.py
class UserLoginAPIView(APIView):
permission_classes = [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
print('request.data', request.data)
print('serializer.data',serializer.data)
login(request, serializer.data)
if data.get('remember'):
request.session.set_expiry(60 * 60 * 24 * 7 * 3)
else:
request.session.set_expiry(0)
return Response({
'detail': ('Logged in successfully'),
# TODO: maybe more user info in the request would have sense
'username': serializer.data.username
})
return Response(serializer.errors, status=HTTP_400_BAD_REQUEST)
если требуется создание пользователя
class UserCreateSerializer(ModelSerializer):
email = EmailField(label='Email Address')
email2 = EmailField(label='Confirm Email Address')
class Meta:
model = User
fields = [
'username',
'id',
'password',
'email',
'email2',
]
extra_kwargs = {"password":
{"write_only": True}
}
def create(self, validated_data):
print('validated_data',validated_data)
username = validated_data['username']
email = validated_data['email']
email2 = validated_data['email2']
password = validated_data['password']
user_obj = User(
username=username,
email=email
)
user_obj.set_password(password)
user_obj.save()
return validated_data
Подробнее здесь: https://stackoverflow.com/questions/384 ... tribute-pk
Мобильная версия