【问题标题】:Dissociate App.py and index.html Flask Python分离 App.py 和 index.html Flask Python
【发布时间】:2020-06-18 01:49:39
【问题描述】:

你好,世界,

Python 和 FLASK 的新手,我想从 flask 上传、处理和下载一个 csv 文件。

以下代码为我提供了请求的输出,存储在“app.py”中:

from flask import Flask, make_response, request
import io
import csv
import pandas as pd


app = Flask(__name__)

@app.route('/')
def form():
    return """
        <html>
            <body>
                <h1>Data Processing</h1>
                </br>
                </br>
                <p> Insert your CSV file and then download the Result
                <form action="/transform" method="post" enctype="multipart/form-data">
                    <input type="file" name="data_file" class="btn btn-block"/>
                    </br>
                    </br>
                    <button type="submit" class="btn btn-primary btn-block btn-large">Pocess</button>
                </form>
            </body>
        </html>
    """

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

    # Load DF
    df = pd.read_csv(request.files.get('data_file'))

    # Process
    df['New'] = df['col1'].apply(lambda x: '{0:0>10}'.format(x))

    # Send Response
    resp = make_response(df.to_csv())
    resp.headers["Content-Disposition"] = "attachment; filename= export.csv"
    resp.headers["Content-Type"] = "text/csv"
    return resp

if __name__ == "__main__":
    app.run(debug=True)

问题 将我的文件拆分为 index.html 和 app.py 后,如何连接它们? 我试过 render_template 但没有成功

编辑

检查您的 cmets 后,以下是我所做的:

文件夹:

  • 用户/pro/app.py
  • 用户/pro/templates/index.html
  • 用户/pro/templates/images/logo.jpg
  • 用户/pro/templates/mycss.css

将之前的文件拆分成app.py和index.html

App.py 看起来像这样

from flask import Flask, make_response, request, render_template
import io
import csv
import pandas as pd
from datetime import datetime

app = Flask(__name__, template_folder='C:/Users/pro/templates')


@app.route('/')
def home():
    return render_template('index.html')

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

    # Load DF
    df = pd.read_csv(request.files.get('data_file'))

    # Process
    df['New'] = df['col1'].apply(lambda x: '{0:0>10}'.format(x))

    # Send Response
    resp = make_response(df.to_csv())
    resp.headers["Content-Disposition"] = "attachment; filename= export.csv"
    resp.headers["Content-Type"] = "text/csv"
    return resp

if __name__ == "__main__":
    app.run(debug=True)

Index.html 看起来像这样

<!DOCTYPE html>

<html >
<head>
<meta charset="UTF-8">
<title>ML API</title>

<link href="mycss.css" rel="stylesheet" type="text/css">
</head>
<body>

<div class="login"> <br/><br/><br/>
<center>
<img src= "images/logo.jpg" width="550" height="145"> <br/><br/>
<input type="file" class="btn btn-primary btn-block btn-large" name="myfile" required="required"/>  <br/>

<button type="submit" class="btn btn-primary btn-block btn-large" >Process</button>
</center>
</div>
</body>
</html>

问题是现在没有进行任何处理。当我点击处理时,什么也没有发生。之前,我能够下载包含新列的 CSV 文件。此外,图像不显示。

感谢任何人的帮助

【问题讨论】:

    标签: python html css flask


    【解决方案1】:

    如果您将 html 与 Python 文件分开,我想我可以提供帮助。 HTML 文件应该放在“模板”文件夹中,因为这是烧瓶读取所有 HTML 文件的地方。也不要忘记导入“render_template”。希望这可以帮助! (您能否再给我一些关于您的奖金问题的信息?)

    【讨论】:

    • 感谢@Kirshan Murali,但即使在导入render_template 时,似乎我错过了一些步骤,但哪一步:x
    【解决方案2】:

    您应该将 index.html 放在名为 templates 的文件夹中:

    https://pythonise.com/series/learning-flask/rendering-html-files-with-flask 例如完整的解释

    关于从另一台计算机启动烧瓶,请参阅: Configure Flask dev server to be visible across the network

    修改后:

    您已删除表单部分:"

    另外,您的图像应该位于名为 static 的文件夹中,请参阅 https://pythonise.com/series/learning-flask 例如。 特别是第 4 集和第 7 集

    【讨论】:

    • 感谢@ThomaS 的帮助,问题已根据您的建议进行了编辑。
    • 我编辑了我对编辑你的问题的回答
    • 感谢@ThomaS 提供有关 Image 的提示,现在可以使用了。但是,如果我保持 def 形式,我应该在里面放什么?因为我想在 index.html 中已经有相同的内容。因此,如何将 muy index.htlm 链接到我的 app.py?
    • 您仍然应该使用表单将您的输入和按钮包装在 index.html 中,表单操作是从索引页面调用 /transform url 的操作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-26
    • 2023-02-10
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 2022-01-25
    相关资源
    最近更新 更多