Python 将html报告转换为csv

Python 将html报告转换为csv,python,csv,email,flask,sqlalchemy,Python,Csv,Email,Flask,Sqlalchemy,我正在创建一个Flask应用程序,它根据用户输入创建一个表,然后允许用户通过列运行一个报告。用户应从数据库中选择一列并检索数据;在此之后,用户可以输入电子邮件,以便将报告发送到 报告功能可以工作,但在填写电子邮件条目后,它不会做任何事情。为了测试这一点,我刚刚尝试用一个逗号分隔的字符串值来显示该列 这不起作用,会带来: TypeError:view函数未返回有效响应。函数返回None或结束时没有返回语句 这不起作用,会带来: TypeError: The view function did no

我正在创建一个Flask应用程序,它根据用户输入创建一个表,然后允许用户通过列运行一个报告。用户应从数据库中选择一列并检索数据;在此之后,用户可以输入电子邮件,以便将报告发送到

报告功能可以工作,但在填写电子邮件条目后,它不会做任何事情。为了测试这一点,我刚刚尝试用一个逗号分隔的字符串值来显示该列

这不起作用,会带来: TypeError:view函数未返回有效响应。函数返回None或结束时没有返回语句

这不起作用,会带来:

TypeError: The view function did not return a valid response. The function either returned None or ended without a return statement.
sendreport.py:

from flask import Flask, render_template, url_for, request, redirect, flash, session
from flask_mail import Mail, Message

app = Flask(__name__)

from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, ForeignKey, select
meta = MetaData()
engine = create_engine("postgresql://username:password@localhost/test-db-02", echo = True)
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()

class TestValue(Base):
    __tablename__ = 'test_value'
    id = Column('id', Integer, primary_key=True)
    val1 = Column('val1', String(15))
    val2 = Column('val2', String(15))
    val3 = Column('val3', String(15))
    val4 = Column('val4', String(15))
    val5 = Column('val5', String(15))

    def __init__(self, val1, val2, val3, val4, val5):
        self.val1 = val1
        self.val2 = val2
        self.val3 = val3
        self.val4 = val4
        self.val5 = val5

Session = sessionmaker(bind=engine)
db_session = Session()

@app.route('/tablelog', methods=['GET', 'POST'])
def tablelog():
    title = "Log Table"
    category = request.form.get("val_category")
    item1 = request.form.get("val_item1")
    item2 = request.form.get("val_item2")
    item3 = request.form.get("val_item3")
    item4 = request.form.get("val_item4")
    if request.method == 'GET':
        data = db_session.query(TestValue).all()
        return render_template('tablelog.html', title=title, data=data)
    else:
        db_entry = TestValue(category, item1, item2, item3, item4)
        db_session.add(db_entry)
        db_session.commit()
        data = db_session.query(TestValue).all()
        return render_template('tablelog.html', title=title, data=data)

@app.route('/reports', methods=['GET', 'POST'])
def reports():
    title = "SPA Reports"
    rv = request.form.get("report_val")
    sendEmail = request.form.get("sendEmail")
    sub_report = request.form.get("sub-btn")
    val_data = db_session.query(TestValue).order_by(TestValue.id)
    data = val_data.all()
    if request.method == 'GET':
        return render_template('reports.html', title=title, data=data)
    elif rv == "val1" and sendEmail != None:
        category = val_data.all()
        if sub_report:
            for d in category.id:
                csv = str(f'{d}, ')
                return f"{csv}"
        return render_template('reports.html', title=title, category=category)

if __name__ == '__main__':
    app.run(debug=True)
reports.html的代码片段:

{% if category %}
<table>
    <tr>
        <th>ID</th>
        <th>CATEGORIES</th>
    </tr>
    {% for f in category %}
        <tr>
            <td>{{ f.id }}</td>
            <td>{{ f.val1 }}</td>
        </tr>
    {% endfor %}
</table>
{% endif %}
<br><br>
<div>
    <input type="text" name="sendEmail" placeholder="Enter email here">
    <button type="submit" name="sub" value="sub-btn">SEND EMAIL!</button>
</div>
应打印:

hello world from sinclair

发布调试问题时,请包括回溯,而不仅仅是错误消息。在
reports()
中,for循环中的
returnf“{csv}”
语句看起来有点可疑。关于“可疑”表达式,
str(f'{d}')
似乎有点多余。格式字符串就是字符串。哦,好的,对不起,它说的是关于#主体不能是none,引用如果rv是none,那么会引发一个TypeError。然后声明#确保主体是响应类的实例
hello world from sinclair