400 Ошибка неверного запроса во время загрузки файла Flask? - PullRequest
0 голосов
/ 24 февраля 2019

Эта функция просмотра используется для создания формы загрузки файла и ее обработки (да, это происходит непосредственно из Документов 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, которое нарушает это?Что я тут не так делаю?

1 Ответ

0 голосов
/ 05 марта 2019

Добавление токена csrf сделало это ...

<input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...