В Flask, что такое request.args и как оно используется?

Я новичок в 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() принимает два параметра. Пожалуйста, объясните, почему он принимает два параметра и каково их использование.

Ответы

Ответ 1

Согласно документам flask.Request.args.

flask.Request.args
MultiDict с разобранным содержимым строки запроса. (Часть в URL после знака вопроса).

Таким образом, args.get() является методом get() для MultiDict, чей прототип выглядит следующим образом:

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

Обновление:
В более новой версии фляги (v1.0.x и v1.1.x) flask.Request.args является ImmutableMultiDict(неизменный MultiDict), поэтому приведенный выше прототип и конкретный метод все еще действительны.

Ответ 2

@martinho как новичок, использующий Flask и Python сам, я думаю, что предыдущие ответы здесь считали само собой разумеющимся, что вы хорошо понимали основы. Если вы или другие зрители не знаете основ, я дам больше контекста, чтобы понять ответ...

... request.args приносит вам "словарь" . Объект "словарь" похож на другой тип коллекционного типа в Python, поскольку он может хранить много элементов в одном объекте. Поэтому ответ на ваш вопрос

И сколько параметров request.args.get() принимает.

Требуется только один объект, тип словаря (как указано в предыдущих ответах). Однако этот "словарь" может иметь столько элементов, сколько необходимо... (словари имеют парные элементы, называемые Key, Value).

Другие типы коллекций, кроме "словарей", будут "кортежем" и "списком"... вы можете запустить поиск в Google по этим и "структурам данных", чтобы изучить другие основы Python. Этот ответ основан на Python; У меня нет идеи, если то же самое относится к другим языкам программирования.

Ответ 3

request.args - это MultiDict с разобранным содержимым строки запроса. Из документации метода get:

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

Возвращает значение по умолчанию, если Запрошенные данные не существуют. Если тип указан и может быть вызван следует преобразовать значение, вернуть его или вызвать ValueError, если это невозможно.

Ответ 4

В некоторых случаях он имеет некоторое интересное поведение, о котором хорошо знать:

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'