在任何烧瓶应用中轻松渲染CSV

Flask-CSV的Python项目详细描述


轻松渲染任何烧瓶应用程序中的CSV

安装

烧瓶csv已打包,您可以使用pip安装:

pip install flask_csv

如何使用?

flask csv有一个名为send_csv的简单hepler方法,它允许您发送 烧瓶端点中的csv文件。它需要一个dict的iterable、一个文件名和一个 字段列表。iterable中所有dict的键必须与 给定字段。

它将返回一个Response对象,其文件名集和正文包含 CSV数据。

举个简短的例子你会更好地理解。

@app.route("/")defindex():returnsend_csv([{"id":42,"foo":"bar"},{"id":91,"foo":"baz"}],"test.csv",["id","foo"])

点击此端点将返回:

id,foo
42,bar
91,baz

传递附加参数

send_csv的其余参数将传递给send_file。为 例如,要禁用缓存,请执行以下操作:

send_csv([{"id":42,"foo":"bar"},{"id":91,"foo":"baz"}],"test.csv",["id","foo"],cache_timeout=0)

您还可以将附加参数传递给csv编写器,如下所示:

send_csv([{"foo":42},{"bar":"baz"}],"test.csv",["foo"],writer_kwargs={"extrasaction":"ignore"})

在本例中,“bar”键不会引发一个ValueError,因为编写器 将为参数extrasaction赋予值“ignore”。

更改分隔符

还可以使用delimiter选项更改分隔符。

send_csv([{"id":42,"foo":"bar"},{"id":91,"foo":"baz"}],"test.csv",["id","foo"],delimiter=';')

将导致:

id;foo
42;bar
91;baz

指定文件编码

还可以使用encoding选项(默认情况下为utf-8)指定用于发送文件的编码。

send_csv([{"id":42,"foo":"bar"},{"id":91,"foo":"baz"}],"test.csv",["id","foo"],encoding='iso-8859-1')

使用棉花糖模式

您可以使用棉花糖中的Schema,方法是将其作为schema传递给send_csv。 如果您只想保留id并确保它们是整数,可以这样做:

classIdSchema(Schema):id=fields.Integer()send_csv([{"id":42,"foo":"bar"},{"id":91,"foo":"baz"}],"test.csv",["id","foo"],schema=IdSchema())

结果是:

id
42
91

systemerror返回一个带有错误集的结果

在为flask应用程序使用uwsgi时,可能会在send_file方法上引发此类错误。 如果是这样的话,在uwsgi配置中添加以下选项应该可以解决问题:

wsgi-disable-file-wrapper = true

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Apache Flink外部Jar   创建和强制转换对象数组时发生java错误   Java,添加数组   具有相同包结构和类的java JAR   java Jenkins未能构建Maven项目   java为什么一个forloop比另一个更快,尽管它们做的“一样”?   servlets在将“/”站点迁移到Java EE包时处理contextpath引用   无法解析java MavReplugin:2.21或其某个依赖项   泛型如何编写比较器来泛化Java中的两种类型的对象?   java Android Emulator未在netbeans上加载   多线程Java使用线程对数组中的数字求和:在同步块中使用新变量作为锁:差异   java如何在JSP/servlet中设置<input>标记的值?