【发布时间】:2022-01-24 13:44:24
【问题描述】:
所以我正在尝试使用我的数据库中的前 20 个“事件”设置一个索引页面,并可以选择进一步或后退。 这是我的代码:
@app.route('/', methods=['GET', 'POST'])
def index():
page = int(request.args.get('page', default=1, type=int))
print("page is " + str(page))
page_backwards = str((page - 1))
print("page_backwards is " + page_backwards)
page_forwards = str((page + 1))
print("page_fowards is " + page_forwards)
if request.method == 'GET':
offset = int(20 * (page - 1))
cursor = connection.cursor()
if page <= 0:
return redirect('/?page=1')
if page == 1:
events = cursor.execute(
"SELECT name, date, time, venue, id FROM events ORDER BY date ASC LIMIT 20").fetchall()
elif page > 1:
events = cursor.execute(
"SELECT name, date, time, venue, id FROM events ORDER BY date ASC LIMIT 20 OFFSET ?", (offset,)).fetchall()
return render_template("index.html", events=events)
if request.method == 'POST':
if 'previous' in request.form:
print("POST" + page_backwards)
return redirect('/?page=' + page_backwards)
elif 'next' in request.form:
print("POST "+ page_forwards)
return redirect('/?page=' + page_forwards)
它会更简洁,但我正在尝试调试它,这就是 page_backwards 等位于顶部的原因。
莫名其妙的部分是什么?
if request.method == 'POST':
if 'previous' in request.form:
print("POST" + page_backwards)
return redirect('/?page=' + page_backwards)
elif 'next' in request.form:
print("POST "+ page_forwards)
return redirect('/?page=' + page_forwards)
这里的打印部分运行良好,它打印出正确的页面,但由于某种原因,返回重定向行为异常并被锁定到 1 和 2。
发生了什么:单击 PREVIOUS/NEXT 按钮后,它会将页面变量减去/添加 1,然后将该变量添加为参数。变量已正确更新,但无论发生什么,返回总是重定向到第 0 页(然后转到第 1 页)或第 2 页!!
这真是莫名其妙:
page is 5
page_backwards is 4
page_fowards is 6
127.0.0.1 - - [23/Dec/2021 16:29:49] "GET /?page=5 HTTP/1.1" 200 -
[...]
page is 1
page_backwards is 0
page_fowards is 2
POST 2
127.0.0.1 - - [23/Dec/2021 16:29:52] "POST / HTTP/1.1" 302 -
page is 2
page_backwards is 1
page_fowards is 3
127.0.0.1 - - [23/Dec/2021 16:29:52] "GET /?page=2 HTTP/1.1" 200 -
【问题讨论】:
-
据我了解,POST 请求似乎正在重置页面变量,因此默认为 1。我怎样才能阻止这种情况发生?