在Flask中,什么是request.args以及它是如何使用的?

时间:2016-01-08 07:00:59

标签: python python-2.7 flask pagination

我是Flask的新手。我无法理解如何使用request.args。我在某处读到它用于返回查询字符串的值[如果我错了就纠正我]。以及request.args.get()所需的参数数量。 我知道当我必须存储提交的表单数据时,我可以使用

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

此处,只传递一个参数。

考虑这段代码。在此代码中也进行了分页。

@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)

这里,request.args.get()有两个参数。请解释为什么它需要两个参数以及它的用途。

4 个答案:

答案 0 :(得分:81)

根据flask.Request.args文件。

  

<强> flask.Request.args
  带有查询字符串的已解析内容的 MultiDict 。 (问号后面的URL中的部分)。

因此args.get()MultiDict的方法get(),其原型如下:

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

答案 1 :(得分:10)

@martinho作为一个自己使用Flask和Python的新手,我认为之前的答案理所当然地认为你对基础知识有很好的理解。如果您或其他观众不了解基本面,我会提供更多背景来理解答案...

... request.args带来了一个&#34;字典&#34;对象为你。 &#34;字典&#34; object类似于Python中的其他集合类型的对象,因为它可以在一个对象中存储许多元素。因此,你的问题的答案

  

request.args.get()需要多少参数。

只需要一个对象,一个&#34;字典&#34;对象类型(如前面的答案中所述)。这个&#34;字典&#34;但是,对象可以包含所需数量的元素...(字典具有称为键,值的配对元素)。

除了&#34;词典&#34;之外的其他集合类型的对象将是&#34; tuple&#34;和&#34; list&#34; ...您可以对这些对象进行谷歌搜索和&#34;数据结构&#34;为了学习其他Python基础知识。这个答案是基于Python的;如果同样适用于其他编程语言,我也不知道。

答案 2 :(得分:1)

request.argsMultiDict,其中包含查询字符串的已解析内容。 来自get commons-collections方法:

  

获取键,默认=无,类型=无

     

如果是,则返回默认值   请求的数据不存在。如果提供了类型并且可以调用它   应该转换值,返回它或引发ValueError,如果是这样的话   不可能。

答案 3 :(得分:0)

在某些情况下,有一些有趣的行为需要注意:

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'