flask返回文件及当前路径

一、框架结构

│   ├── flask                            // 源码目录
│   ├── templates                          // 模板
│   │   ├── index.html                        // 首页
│   │   ├── extraction.html                   // 提取页面
│   ├── app.py                             // 应用
│   ├── extraction .py                     // 处理过程

1、app.py

from flask import Flask, render_template
import os
from extraction import Submit, GetData


app = Flask(__name__)
SECRET_KEY = os.urandom(32)
app.config['SECRET_KEY'] = SECRET_KEY

"""
方案2

from flask import Flask
from flask import current_app
from flask_restful import Api, Resource, reqparse
api = Api(app)


"""

@app.route('/')
def index():
	# 首页
    current_app.logger.info("index")
    return render_template('index.html')


@app.route('/extraction/', methods=['GET', 'POST'])
def extraction():
	# 提取页面
    form = Submit()
    if form.validate_on_submit():
        return GetData()
    return render_template('extraction.html', form=form)


@app.route('/test', methods=['GET', "POST"])  
def test():
 
    # POST方式获取参数
    res = request.form.get('name')
    res = request.form
    res = request.values
    res = request.data # 请求时需是json类型 在Headers中设置 Content-Type:application/json
    res = request.json # 请求时需是json类型
    res = request.get_data() # 请求时需是json类型
 
    # GET方式获取参数
    res = request.args.get('name')
    res = request.args
    res = request.values



"""
class flaskapi(Resource):

    def get():
	    # 首页
        current_app.logger.info("index")
        return render_template('index.html')

 
    def post():
        form = Submit()
        if form.validate_on_submit():
            return GetData()()
        return render_template('extraction.html', form=form)


api.add_resource(flaskapi, "/flaskapi")
""""
if __name__ == "__main__":
    app.run(host="127.0.0.1", port=5050)

 2.index.html 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>
这是首页
<hr />
{% block body %}
<a class="extraction" href="/extraction/"> 数据提取演示 </a>
{% endblock %}
</body>
</html>

3. extraction.html  

{% extends "index.html" %}
{% block body %}
<form action="" method="post" novalidate>
    {{ form.hidden_tag() }}
    <p>{{ form.submit() }}</p>
</form>
{% endblock %}

4、extraction.py

from flask_wtf import FlaskForm
import pandas as pd
import io
from flask import make_response
from wtforms import SubmitField
import time


class GetData:
    def __init__(self):
        self.data = pd.DataFrame(['Geeks', 'is', 'portal'])

    def __call__(self):
        df = self.data
        out = io.BytesIO()
        writer = pd.ExcelWriter(out, engine='xlsxwriter')
        df.to_excel(excel_writer=writer, index=False, sheet_name='示例')
        writer.save()
        writer.close()
        file_name = time.strftime('%Y%m%d', time.localtime(time.time())) + '.xlsx'
        response = make_response(out.getvalue())
        response.headers["Content-Disposition"] = "attachment; filename=%s" % file_name
        response.headers["Content-type"] = "application/x-xls"
        """ 如果输出的是 csv 文件
        df = self.data
        out = io.StringIO()
        df.to_csv(out, index=False)
        file_name = time.strftime('%Y%m%d', time.localtime(time.time())) + '.csv'
        response = make_response(out.getvalue())
        response.headers["Content-Disposition"] = "attachment; filename=%s" %file_name
        response.headers["Content-type"] = "text/csv"
        """
        return response


class Submit(FlaskForm):
    submit = SubmitField('提取数据')

二、关键过程

df = getdata()
out = io.StringIO()
df.to_csv(out, index=False)
file_name = time.strftime('%Y%m%d', time.localtime(time.time())) + '.csv'
response = make_response(out.getvalue())
response.headers["Content-Disposition"] = "attachment; filename=%s" %file_name
response.headers["Content-type"] = "text/csv"

三、获取当前路径

import os
path  = os.path
        
path1 = os.getcwd()  # 获取当前工作目录路径
path2 =os.path.abspath('.')  # 获取当前工作目录路径
path3 = os.path.abspath(os.curdir)  # 获取当前工作目录路径

四、参考

1、Flask系列之结构 - 知乎 (zhihu.com)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

**星光*

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值