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' : '' }
3 Réponses :
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 '' }
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
@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.
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.
pouvez-vous publier la structure de votre modèle utilisateur nominal (définition)?
@RomanPerekhrest j'ai édité mon message