Эта функция просмотра используется для создания формы загрузки файла и ее обработки (да, это происходит непосредственно из Документов Flask ):
transaction_blueprint = Blueprint(
"transaction", __name__, template_folder="../templates", url_prefix="/transactions"
)
@transaction_blueprint.route("/upload", methods=["GET", "POST"])
def upload_select_file():
print(request.method)
if request.method == "POST":
# check if the post request has the file part
if "file" not in request.files:
flash("No file part")
return redirect(request.url)
file = request.files.get("file")
# if user does not select file, browser also
# submit an empty part without filename
if file.filename == "":
flash("No selected file")
return redirect(request.url)
# allowed_file is defined elsewhere
if file and allowed_file(file.filename):
filename = secure_filename(file.filename)
file.save(os.path.join("/tmp", filename))
return jsonify({"success": True})
return """
<!doctype html>
<title>Upload new File</title>
<h1>Upload new File</h1>
<form method=post enctype=multipart/form-data>
<input type=file name=file>
<input type=submit value=Upload>
</form>
<p>%s</p>
""" % "<br>".join(os.listdir("/tmp",))
При отправке формы из http://localhost:8000/transactions/upload
, я получаю 400 ошибочных запросов.Я тестирую с помощью простого текстового файла размером около 15 КБ.Насколько я могу судить, HTML хорошо сформирован:
<form method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="Upload">
</form>
Я искал два дня и узнал, что эта ошибка возникает, когда атрибут ввода файла name
не найден в конечной точке представления Flask.,Я справляюсь с этим, используя request.files.get("file")
.Далее В моем случае, после отправки формы, метод не достигается (журнал сервера даже не печатает "POST
").Это имеет смысл, так как 400 - это ошибка клиента, но все же ...
Есть ли что-то с использованием Blueprints, которое нарушает это?Что я тут не так делаю?