我正在研究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()以处理文件?
谢谢大家。
答案 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。
基于方法动作可以修改功能