1
votes

Manière élégante de renvoyer un champ json si le champ est nul en Python

J'ai une question stupide sur mon API REST flask. Si j'ai un modèle d'utilisateur avec beaucoup d'informations et que je veux le renvoyer en tant que json. Mais certaines informations n'ont toujours aucune valeur (NULL). Quelle est la manière élégante de le renvoyer sous la forme d'une chaîne vide ou d'une autre valeur par défaut au lieu de le renvoyer comme nul.

Quelque chose comme ceci:

class UserModel(db.Model):
    __tablename__ = 'users'

    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80))
    password = db.Column(db.String(80))
    fullname = db.Column(db.String(80)) 

au lieu de ceci: p>

def json(self):
        return {
            'username': self.phone,
            'fullname': self.fullname
        }

Voici ma fonction:

{ 
  'username': 'foo',
  'fullname' : null
}

Voici le modèle utilisateur:

{ 
  'username': 'foo',
  'fullname' : ''
}


2 commentaires

pouvez-vous publier la structure de votre modèle utilisateur nominal (définition)?


@RomanPerekhrest j'ai édité mon message


3 Réponses :


1
votes

Une façon est d'avoir des conditions dans votre dict de retour:

def json(self):
        return {
            'username': self.phone if self.phone else '',
            'fullname': self.fullname if self.fullname else ''
        }


0 commentaires

3
votes

sqlalchemy.schema.Column permet de spécifier le paramètre default = :

class UserModel(db.Model):
    __tablename__ = 'users'

    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80))
    password = db.Column(db.String(80))
    fullname = db.Column(db.String(80), default="") 

https://docs.sqlalchemy.org/en/latest/core/metadata.html#sqlalchemy.schema.Column. params.default


1 commentaires

@ikhsan Je pense que vous voudriez le définir sur non-nullable, sinon les valeurs None peuvent toujours être présentes si elles sont attribuées après l'initialisation, et elles seront toujours servies par l'API.



0
votes

Fondamentalement, si vous souhaitez remplacer la valeur None en Python, vous pouvez utiliser l'opérateur ou comme ceci:

def json(self):
    return {
        'username': self.phone,
        'fullname': self.fullname or 'some default value'
    }

Au cas où self.fullname a une valeur, elle sera renvoyée. Mais si c'est Aucun , alors "une valeur par défaut" apparaît.

J'espère que cela vous aidera.


0 commentaires