Что произошло, когда пользователь нажал «Загрузить» со страницы индекса? - PullRequest
0 голосов
/ 22 февраля 2019

Я изучаю некоторый код из этого хранилища Лю Lixiang, и мне интересно, как это на самом деле работает.

Источник здесь: https://gist.github.com/liulixiang1988/cc3093b2d8cced6dcf38

Во-первых, когда я получаюна главную страницу (index.html).Он подскажет мне страницу, на которую я загружаю свои файлы.

<!DOCTYPE html>
<html lang="en">
<head>
<link href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css"
      rel="stylesheet">
</head>
<body>
<div class="container">
      <div class="header">
        <h3 class="text-muted">How To Upload a File</h3>
      </div>
      <hr/>
      <div>

      <form action="upload" method="post" enctype="multipart/form-data">
        <input type="file" multiple="" name="file[]" class="span3" /><br />
        <input type="submit" value="Upload"  class="span2">
      </form>
      </div>
    </div>
  </body>
</html>

Когда я нажимаю «Отправить», как это действие связывает меня с функцией upload () в app.py для обработки файлов?

Спасибо, ребята.

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Маршрутизация выполняется на основе заданного action

<form action="upload" method="post" enctype="multipart/form-data">
<input type="file" multiple="" name="file[]" class="span3" /><br />
<input type="submit" value="Upload"  class="span2">
</form>

. Здесь действие определяется как загрузка, поэтому фляга ищет любую функцию / URL-адрес, связанный с загрузкой действия.

<form action="upload" method="post" enctype="multipart/form-data">

в app.py вы можете найти функцию с действием имени, таким образом выполняя функцию там

@app.route('/upload', methods=['POST'])
def upload():

, это также может отличаться в зависимости от указанного вами метода.Методы могут быть GET, POST, PUT.

В зависимости от действия метода функции могут быть изменены

0 голосов
/ 22 февраля 2019

действие в форме перенаправляет вас на URL / загрузку через POST-запрос:

<form action="upload" method="post" enctype="multipart/form-data">

Теперь для upload.html в гисте определен маршрут / upload:

@app.route('/upload', methods=['POST'])

И следующий код обрабатывает загрузку, например, получение файлов из запроса на публикацию и т. Д.

Просто попробуйте простую страницу, нажмите «Отправить», и вы увидите, что происходит:

<html>
  <body>
    <form action="upload" method="post">
      <input type="submit" value="Submit" />
    </form>
  </body>
</html>

Сохраните его как HTML-файл, откройте его в браузере и нажмите «Отправить».Вы увидите в адресной строке вашего браузера «upload» как цель маршрута.POST-запрос пытается перейти к этому ресурсу, и upload.html в вашем примере обрабатывает это.

Кроме того, комментарии в app.py выполняют некоторую часть объяснения:

# We'll render HTML templates and access data sent by POST
# using the request object from flask. Redirect and url_for
# will be used to redirect the user once the upload is done
# and send_from_directory will help us to send/show on the
# browser the file that the user just uploaded
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...