[PYTHON] À propos du traitement des paramètres dans le fichier request.args de Flask

Si vous le connaissez, vous pouvez en profiter, donc je veux que les utilisateurs de Flask s'en souviennent.

L'état réel de flask.request.args est l'instance suivante lors de la lecture de la source.

werkzeug.datastructures.ImmutableMultiDict

Je pense que la méthode la plus utilisée dans request.args est probablement get, mais la réalité est

from werkzeug.datastructures import TypeConversionDict

Obtenez la méthode de.

Vous pouvez spécifier le type en lisant l'aide de ceci.

 |  ----------------------------------------------------------------------
 |  Methods inherited from TypeConversionDict:
 |  
 |  get(self, key, default=None, type=None)
 |      Return the default value if the requested data doesn't exist.
 |      If `type` is provided and is a callable it should convert the value,
 |      return it or raise a :exc:`ValueError` if that is not possible.  In
 |      this case the function will return the default as if the value was not
 |      found:
 |      
 |      >>> d = TypeConversionDict(foo='42', bar='blub')
 |      >>> d.get('foo', type=int)
 |      42
 |      >>> d.get('bar', -1, type=int)
 |      -1
 |      
 |      :param key: The key to be looked up.
 |      :param default: The default value to be returned if the key can't
 |                      be looked up.  If not further specified `None` is
 |                      returned.
 |      :param type: A callable that is used to cast the value in the
 |                   :class:`MultiDict`.  If a :exc:`ValueError` is raised
 |                   by this callable the default value is returned.
 |  
 |  ----------------------------------------------------------------------

En d'autres termes, ce paramètre peut être facilement spécifié comme type INT.

Pour donner un exemple simple, je pense que les paramètres de décalage et de limite sont souvent créés dans l'API de référence, mais cela peut être fait dans les deux lignes suivantes, y compris la spécification de type.

    offset = request.args.get("offset", default=0, type=int)
    limit = request.args.get("limit", default=10, type=int)

Il y a pas mal de choses que vous ne remarquerez pas simplement en lisant la documentation Flask, donc si vous lisez la documentation et l'implémentation de werkzeug, vous trouverez quelque chose d'inattendu, alors lisez-le.

Si vous étendez cela plus loin, vous pouvez également recevoir des paramètres en utilisant votre propre type de données.

class SortType(object):
    accepts = ["-time", "-size", "+time", "+size"]    
    default = ["-time"]

    def __init__(self, sort_parameter):
        super(SortType, self).__init__()    
        if sort_parameter in self.accepts:
           self.sort = sort_parameter
        else:
           self.sort = self.default

    def __repr__(self):
        return self.sort

    def __str__(self):
        return self.sort
sort = '%s' % request.args.get("sort", type=SortType)

Nous définissons une classe avec des types de tri et un tri par défaut, la définissons en type et recevons le paramètre de tri.

Recommended Posts

À propos du traitement des paramètres dans le fichier request.args de Flask
Traitement asynchrone du céleri dans Flask
À propos de la personnalisation de Flask
J'ai étudié en détail le traitement des variables en python
À propos du traitement du traitement d'agrégation de données de séries chronologiques IoT dans Azure Time Series Insights
Traitement de fichiers en Python
Traitement multithread en python
Traitement de texte avec Python
Traitement des requêtes en Python
À propos de __all__ en python
Téléchargeur d'images avec Flask
Traitement de texte UTF8 avec python
Utiliser le magasin de paramètres en Python
Collection de traitement d'image en Python
Vérifiez simplement Content-Type avec Flask (@content_type)
Utilisation du mode Python dans le traitement
Transférer les valeurs des paramètres en Python
À propos de "for _ in range ():" de python
Télécharger plusieurs fichiers avec Flask