В 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'