gpt4 book ai didi

python - 从 Flask POST 中传递的不仅仅是结果页面

转载 作者:太空宇宙 更新时间:2023-11-03 16:53:53 24 4
gpt4 key购买 nike

(Flask新手提醒)

按照以下步骤在 Flask 中上传和保存文件:

@app.route('/upload', methods=['GET', 'POST'])
def upload_file():
if request.method == 'POST':
file = request.files['file']
if file and allowed_file(file.filename):
filename = secure_filename(file.filename)
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
return render_template_string('''
{% extends "base.html" %}
{% block content %}
<h4>File uploaded</h4>
<p><a href={{ url_for('members_page') }}>Back</a></p>
{% endblock %}
''')
elif not allowed_file(file.filename):
return render_template_string('''
{% extends "base.html" %}
{% block content %}
<h3>Please try again</h3>
<h4>File must be a .csv</h4>
<p><a href={{ url_for('upload_file') }}>Back</a></p>
{% endblock %}
''')
return render_template_string('''
{% extends "base.html" %}
{% block content %}
<h4>Upload CSV of Company/URL data</h2>
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="file" />
<input type="submit" />
</form>
{% endblock %}
''')

我希望使filename在另一个函数中可用:

@app.route('/scrape', methods=['GET', 'POST'])
@login_required # Use of @login_required decorator
def scrape():
parser = ConfigParser()
parser.read('config.ini')
keywords = parser.get('scrape', 'keywords').replace(' ', '').split(',')
jobs = scraper.scrape(os.path.join(app.config['UPLOAD_FOLDER'], filename), keywords)

以上是期望的意图,其中文件名由scrape函数已知。显然情况还不是这样。由于 upload_file() 在肯定情况下(确认页面)已经有返回值,如何使 filename 可用? UPLOAD_FOLDER 将不仅仅包含上传的文件,因此我不能只将该路径与其中的任何内容连接起来。

如果这是一个非 Flask 程序,我可能会返回 locals() 然后访问适当的 key ,但我想如果我想维持确认的服务,这是不可能的页。

最佳答案

您需要以某种方式连接两个请求。如果很多用户请求第一个,然后有人请求 /scrape,你怎么知道是哪个用户在请求,他属于哪个文件名?

  1. 您可以使用 session (例如 Cookie session ,请参阅 http://pythonhosted.org/Flask-Session/ )来跟踪上传的文件。将文件名存储在 session 中,当同一用户(具有相同的 cookie)请求 /scrape 时,您可以从用户 session 中检索文件名。
  2. 您可以在第二个请求中包含要使用的文件名。这样,用户自己就必须跟踪他上传的文件。

无论哪种情况,尤其是后者,考虑文件的所有权都很重要:哪个用户有权访问系统上的哪个文件?

关于python - 从 Flask POST 中传递的不仅仅是结果页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35611100/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com