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