用户单击索引页面上的“上传”时会发生什么?

时间:2019-02-22 06:34:56

标签: python html flask

我正在研究Liu 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>

当我单击“提交”时,它如何将我链接到app.py中的函数upload()以处理文件?

谢谢大家。

2 个答案:

答案 0 :(得分:0)

表单中的操作通过POST-Request将您重定向到url / upload:

<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文件,在浏览器中将其打开,然后单击提交。您将在浏览器的地址栏中看到“上传”作为路由目标。 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

答案 1 :(得分:0)

根据给定的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>

此处将操作定义为上载,因此flask寻找与该操作上载链接的任何函数/网址。

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

在app.py中,您可以找到带有名称操作的函数,从而在那里执行该函数

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

这也可能与您指定的方法不同。这些方法可以是GET,POST,PUT。

基于方法动作可以修改功能