web-dev-qa-db-fra.com

Dans Flask, qu'est-ce que request.args et comment est-il utilisé?

Je suis nouveau dans la fiole. Je ne comprends pas comment request.args est utilisé. J'ai lu quelque part qu'il est utilisé pour retourner les valeurs de la chaîne de requête [corrigez-moi si je me trompe]. Et combien de paramètres request.args.get() prend . Je sais que lorsque je dois stocker des données de formulaire soumises, je peux utiliser

fname = request.form.get("firstname")

Ici, un seul paramètre est passé.

Considérons ce code. La pagination a également été faite dans ce code.

@app.route("/")
def home():
    cnx = db_connect()
    cur = cnx.cursor()
    output = []

    page = request.args.get('page', 1)

    try:
        page = int(page)
        skip = (page-1)*4
    except:
        abort(404)

    stmt_select = "select * from posts limit %s, 4;"
    values=[skip]

    cur.execute(stmt_select,values)
    x=cur.fetchall()

    for row in reversed(x):
        data = {
           "uid":row[0],
           "pid":row[1],
           "subject":row[2],
           "post_content":row[3],
           "date":datetime.fromtimestamp(row[4]),
        }
        output.append(data)

    next = page + 1
    previous = page-1
    if previous<1:
    previous=1
    return render_template("home.html", persons=output, next=next, previous=previous)

Ici, request.args.get() prend deux paramètres. S'il vous plaît expliquer pourquoi il prend deux paramètres et quelle est l'utilisation de celui-ci.

38
martinho

Selon le flask.Request.args documents.

flask.Request.args
Un MultiDict avec le contenu analysé de la chaîne de requête. (La partie dans l'URL après le point d'interrogation).

Donc, args.get() est la méthode get() pour MultiDict , dont le prototype est le suivant:

get(key, default=None, type=None)
75
luoluo

@martinho en tant que débutant utilisant Flask et Python moi-même, je pense que les réponses précédentes ici prenaient pour acquis que vous compreniez bien les principes fondamentaux. Au cas où vous ou d'autres téléspectateurs ne connaissent pas les fondamentaux, je vais vous donner plus de contexte pour comprendre la réponse ... 

... le request.args apporte un objet "dictionnaire" pour vous. L'objet "dictionnaire" est similaire aux autres objets de type collection de Python, en ce sens qu'il peut stocker de nombreux éléments dans un seul objet. Donc la réponse à votre question 

Et combien de paramètres request.args.get() prend.

Cela ne prendra qu'un seul objet, un objet de type "dictionnaire" (comme indiqué dans les réponses précédentes). Cependant, cet objet "dictionnaire" peut avoir autant d'éléments que nécessaire ... (les dictionnaires ont des éléments appariés appelés clé, valeur).

En plus des "dictionnaires", d'autres types d'objets de collection seraient "Tuple" et "liste" ... vous pouvez lancer une recherche google sur ceux-ci et sur les "structures de données" afin d'apprendre d'autres bases de Python. Cette réponse est basée sur Python; Je ne sais pas si la même chose s'applique aux autres langages de programmation.

9
alejandro gg

request.args est un MultiDict avec le contenu analysé de la chaîne de requête. À partir de la méthode documentation of get:

get (clé, valeur par défaut = Aucune, type = Aucune)

Renvoie la valeur par défaut si les données demandées n’existent pas. Si type est fourni et est appelable, il devrait convertir la valeur, la renvoyer ou générer une valeur ValueError s'il s'agit de pas possible.

0
r-m-n

Il est intéressant, dans certains cas, d’avoir un comportement intéressant:

from werkzeug.datastructures import MultiDict

d = MultiDict([("ex1", ""), ("ex2", None)])

d.get("ex1", "alternive")
# returns: ''

d.get("ex2", "alternative")
# returns no visible output of any kind
# It is returning literally None, so if you do:
d.get("ex2", "alternative") is None
# it returns: True

d.get("ex3", "alternative")
# returns: 'alternative'
0
Juha Untinen