class UserSerializer(serializers.ModelSerializer): """ User serializer """ if 'email' in drfr_settings.USER_FIELDS: email = serializers.EmailField(validators=[ UniqueValidator(queryset=get_all_users(), message=_('User with this email already exists.')) ]) if 'username' in drfr_settings.USER_FIELDS: username = serializers.CharField(validators=[ UniqueValidator(queryset=get_all_users(), message=_( 'User with this username already exists.')) ]) if enable_has_password(): has_password = serializers.SerializerMethodField() class Meta: model = get_user_model() # Check to response has password field in the case enable Facebook or Google login fields = drfr_settings.USER_FIELDS + ( 'has_password', ) if enable_has_password( ) else drfr_settings.USER_FIELDS read_only_fields = drfr_settings.USER_READ_ONLY_FIELDS extra_kwargs = {'password': {'write_only': True}} def get_has_password(self, user): """ Custom response field to check user has password or not """ return bool(user.password)
class ProfileView(RetrieveUpdateAPIView): """ Get update user profile information """ permission_classes = import_string_list( drfr_settings.PROFILE_PERMISSION_CLASSES) serializer_class = import_string(drfr_settings.PROFILE_SERIALIZER) queryset = get_all_users() def get_object(self): return self.request.user def update(self, request, *args, **kwargs): """ Custom update user profile """ # Remove write only fields when update profile for field in drfr_settings.USER_WRITE_ONLY_FIELDS: if field in request.data.keys(): # Make it editable request.data._mutable = True request.data.pop(field) # Disable editable request.data._mutable = False # Support the case user can change password in profile if # USER_WRITE_ONLY_FIELDS not contain password field if 'password' in request.data.keys(): request.data._mutable = True self.request.user.set_password(request.data.pop('password')[0]) self.request.user.save() request.data._mutable = False return super(ProfileView, self).update(request, *args, **kwargs)
def test_get_all_users(self): all_users = users.get_all_users() self.assertEqual(all_users.count(), 1) self.assertEqual(all_users.first(), self.user)