我有以下文件上传路线。
@app.route("/upload", methods=["GET", "POST"])
def upload_file():
form = FileUploadForm()
if form.validate_on_submit():
file = form.document.data
file_name = secure_filename(file.filename)
save_path = get_user_uploads_folder(current_user) / file_name
return redirect(url_for("upload_file"))
file.save(save_path)
return redirect(url_for("list_user_files"))
return render_template("upload_file.html", form=form)
如何分离这条路线,这样我就可以在不同的功能中使用 GET 和 POST 方法,并使用公共路线,如下所示:
@app.route("/upload", methods=["GET"])
def upload_file():
return render_template(...)
@app.route("/upload", methods=["POST"])
def upload_file():
form = FileUploadForm()
...
return redirect(...)
这在 Flask docs 中进行了讨论。您可以使用以下模式:
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
return do_the_login()
else:
return show_the_login_form()
您可以检查请求中的方法,然后对其应用适当的操作。
@app.route('/upload', methods = ['GET', 'POST')
def upload_file():
if request.method == 'GET':
return render_template(...)
elif request.method == 'POST':
return redirect(...)
else:
// do whatever you want here for exceptions
更改示例中其中一个方法的名称(同一范围内的Python方法名称必须是唯一的):
@app.route("/upload", methods=["GET"])
def upload_file():
return render_template(...)
@app.route("/upload", methods=["POST"])
def upload_file_post():
form = FileUploadForm()
...
return redirect(...)
如果您按照上面的示例更改帖子并使用模板,您还需要更新表单 html 文件
<form method="post" action="{{ url_for('upload_file_post') }}">
最后,为了更干净的路线,您可以使用帖子并获取装饰瓶提供的
@app.get("/upload")
def upload_file():
return render_template(...)
@app.post("/upload")
def upload_file_post():
form = FileUploadForm()
...
return redirect(...)
请参阅 flask 文档了解更多信息