PythonAnywhere dev这里.这是一个关于Flask和Web开发的一个很好的问题,而不是我们的系统特定的,所以我会尝试给出一个没有任何特定的通用答案:-)
有一些事情我需要知道,给出一个明确的答案你的问题,所以我首先列出我所做的假设 – 如果我错了任何一个,给我一个评论我会适当地更新答案.
>我假设你上传的文件不是很大,可以适应一个合理的内存 – 比如说,小于一兆字节.
>我假设你已经编写来从文本文件中生成CSV的程序是Python,而且它(或者更有可能是容易地改变为具有)一个需要一个字符串的函数包含文本文件的内容,并返回需要写入CSV的内容.
如果两者都是这样,那么构建Flask应用程序的最佳方法就是处理Flask内的所有内容.代码示例值得一千字,所以这里是一个简单的一个,我放在一起,允许用户上传一个文本文件,通过一个称为transform的函数(这是你的转换程序中的函数将插入我的位置)在整个文件中替换=,并将结果发送回浏览器. There’s a live version of this app on PythonAnywhere here.
from flask import Flask, make_response, request
app = Flask(__name__)
def transform(text_file_contents):
return text_file_contents.replace("=", ",")
@app.route('/')
def form():
return """
Transform a file demo
"""
@app.route('/transform', methods=["POST"])
def transform_view():
file = request.files['data_file']
if not file:
return "No file"
file_contents = file.stream.read().decode("utf-8")
result = transform(file_contents)
response = make_response(result)
response.headers["Content-Disposition"] = "attachment; filename=result.csv"
return response
关于你的其他问题:
>模板:我没有使用这个例子的模板,因为我想把它全部适合一个代码.如果我正在做的正确,那么我将把窗体视图生成的东西放入一个模板中,但这就是所有.
>你可以通过写入文件来做到这一点 – 是的,可以使用我使用stream属性的文件对象上的save(filename)方法来保存上传的文件.但是如果您的文件很小(根据我上面的假设),那么在内存中处理它们可能更有意义,就像上面的代码一样.
我希望所有的帮助,如果你有任何问题,那么只需留下评论.