我的模板中有两种形式:一种是发布内容,另一种是激活服务器上的文件删除:
<div style="margin-bottom:150px;">
<h4>Delete</h4>
<form method="post" action="/delete">
<div class="form-group">
<input type="hidden" name="delete_input"></input>
</div>
<button type="submit" class="btn btn-danger" id="btnSignUp">Delete</button>
</form>
</div>
<div style="margin-bottom:150px;">
<h4>URLs</h4>
<form method="post" action="/">
<div class="form-group">
<textarea class="form-control" rows="5" id="urls" name="url_area"></textarea>
</div>
<button type="submit" class="btn btn-primary" id="btnSignUp">Urls</button>
</form>
</div>
Run Code Online (Sandbox Code Playgroud)
我的app.py样子是这样的:
@app.route("/")
def main():
return render_template('index.html')
@app.route('/', methods=['POST'])
def parse_urls():
_urls = request.form['url_area'].split("\n")
image_list = get_images(_urls)
return render_template('index.html', images=image_list)
@app.route('/delete', methods=['POST'])
def delete_images():
file_list = [f for f in os.listdir("./static") if f.endswith(".png")]
for f in file_list:
os.remove("./static/" + f)
image_list = []
conn = sqlite3.connect('_db/database.db')
curs = conn.cursor()
sql = "DROP TABLE IF EXISTS images"
curs.execute(sql)
conn.commit()
conn.close()
return render_template('index.html', images=image_list)
Run Code Online (Sandbox Code Playgroud)
两个问题:
我的看法是,我需要使用重定向来避免重复提交,并且在调用delete之后,我需要重定向到索引。
如何正确执行此操作?
我知道redirect和url_for,但是如何重定向到同一页面?
Mah*_*oud 11
您可以通过以下方式获取当前请求的 URL request.url:
因此,要重定向到同一页面,请使用:
redirect(request.url)
Run Code Online (Sandbox Code Playgroud)
Ioa*_*mas 10
这对我来说非常有效,在最后一行:
return redirect(request.referrer)
Run Code Online (Sandbox Code Playgroud)
您可以将所有内容放在一个网址中,但必须检查已提交的表单。您可以具有不同的视图,但不呈现任何内容,在提交删除表单后将所有表单放在主页中,只需delete向该表单操作添加视图功能action="{{url_for('delete_images')}}"
@app.route('/delete', methods=['POST'])
def delete_images():
if request.method == 'POST':
# do your work here
return redirect(url_for('delete_images'))
Run Code Online (Sandbox Code Playgroud)
小智 7
正如弓箭手在下面所说:
return redirect(request.referrer)
Run Code Online (Sandbox Code Playgroud)
当您有一个按钮在单击时使用路由执行给定功能时,这很有用 - 您不想将用户返回到该按钮的 URL - 您想将用户返回到该按钮的 URL路由被引用,即用户单击按钮时所在的页面。
然而,正如马哈茂德所说:
redirect(request.url)
Run Code Online (Sandbox Code Playgroud)
如果您在不使用路由或特殊 URL 或类似内容的页面上执行功能,这将是完美的。它本质上只是刷新页面。
| 归档时间: |
|
| 查看次数: |
17509 次 |
| 最近记录: |