使用django的非常简单的csv报告

django-reportato的Python项目详细描述


#报告[build status image]][travis]

report a to的目标是提供一种轻松获取csv或
google电子表格生成的报告的django方法。

是大的。您可能希望避免强迫您的
用户体验这种延迟,例如,通过在
cron上定期生成报告并允许他们下载最新的副本,或者通过ajax获取
报告,以便您可以在用户等待时向他们显示小猫的图片。

tps://pypi.python.org/pypi/django-reportato)因此
您可以使用以下两种方法安装它:



$pip install django reportato




$easy_install django reportato

gethub.com/potatotlonlondon/reportato.git
$cd reportato
$python setup.py install




\基本配置



>使用reportato,您声明报表外观的方式类似于django的模型形式:




``python
``python
导入ModelReporter

from.models导入记者


class journalistreporter(modelreporter):

model=journalistr
fields=("名字"、"姓氏"、"电子邮件")
custom\u headers={
"名字":"不同的头"


def get\u email列(self,instance):
返回instance.email.replace('@','<;at>;')


orter.get_header_row()
[u'Different header', u'Last name', u'Email']
>>> [row for row in reporter.get_rows()]
[
[u'Angelica', u'Edlund', u'angelicaedlund <AT> engadget.com'],
[u'Arnold', u'Ofarrell', u'arnoldofarrell <AT> reddit.com'],
# ...
]
```


## Documentation

###model reporters

要为给定模型创建报表,只需编写一个
将继承自"report a to.reporters.modelreporter"的类,并指明要报告的
模型。一个非常简单的示例:


``python
from reportato.reporters导入modelreporter



class meta:
model=mymodel
```


可以使用"field s"变量



``python
如果字段名没有"verbose_name",则可以使用"custom_headers":


``python
每个给定的字段都非常简单:

*检查reporter类是否有名为"get-fieldname-column(instance)"的方法。
如果有,则使用它。否则:
*检查给定的"fieldname"是否可以通过实例直接访问。
*如果这两种方法都没有定义。


这意味着您可以将报表中所需的任何内容定义为字段,同时使用适当的"get\u fieldname\u column"方法。并且还可以使用模型的字段、修饰符甚至聚合字段。


例如:



`` python
使用对象列表
或queryset实例化对象。如果不传递一个,则它将接受给定模型的所有对象:



``python
>;>;>myreport(mymodel.objects.filter(something=something\else))
``




创建期间,使用"visible_fields"参数希望在报表上看到哪些字段:

>;>;myreport(visible_fields=['first_name','last_name'])

如果最终用户希望自定义他/她每次要查看的列,则可以构建自定义逻辑。


其他方法:

使用给定"实例"的每个字段的值


今天是你的幸运日,因为"reportato"提供了一个基本视图,你可以从中继承用来构建自己的东西。

`basecsvgeneratorview`继承自django的"django.view s.generic.listview`
这意味着它需要一个模型或queryset来处理。在内部,
`basecsvgeneratorview`将使用'get_queryset()`方法解析要报告的对象列表。


应该继承自"modelreporter"。如果需要决定在执行时使用什么
reporter,请重写"get_reporter_class()"方法



\writer_class`

class属性来定义csv writer类。默认情况下,使用python文档中实现的"unicodewriter"


如果您希望
>更动态的内容,则应重写"get_file_name()"方法。



<
<
<
<











<更进一步的示例








<



<
<
<
<<
<<<
<<<
<
是的oogle sheet的最初计划是添加一些功能,以便从给定的报表中自动创建电子表格。但是,在实现过程中我改变了主意,因为
它对实现oauth所需的工具做了某些假设,并且
觉得它太过杀伤力了。

相反,我提供了一些使用这个库的示例。
基本的理解是,我们需要将csv文件mp到"bytesio"中,并使用"google api python client"将其上载到google驱动器。



``python
import io

/>from reporters.views import basecsvgeneratorview
from.models import mymodel
from.reports import myreport

class myreporttospreadsheet(basecsvgeneratorview):
model=mymodel
reporter\u class=myreport

def get(self,request,*args,**kwargs):
outfile=io.bytesio()
self.write_csv(outfile)
现在outfile中已填充了所需的csv。
我们需要使用OAuth获取用户凭据,此处不包括凭据ls=request.user.oauth庠credentials
http=credentials.authorize(httplib2.http())


service=build(
servicename='drive',
version='v2',
developerkey=settings.google庠api庠key,
http=http


media_body=mediaobaseupload(
outfile,
mimetype='text/csv',
resumable=false


body={
"title":title,
"description":description,
"mimetype":"text/csv"
}

uploaded_file=service.file s()。插入(
body=body,
media_body=media_body,
convert=true将csv转换为电子表格
)。execute()

return httpresponseredirect(uploaded_file['alternatelink'])
```<运行测试非常简单。首先,你需要一个"virtualenv"。我强烈建议使用[`virtualenvrapper`](http://virtualenvwrapper.readthedocs.org/en/latest/)
。安装后,您只需要:

$mkvirtualenv reportato将创建virtualenv
$workon reportato将激活virtualenv
deactivate

所有django mock

一旦安装了这些依赖项,您就可以使用以下命令运行测试:


$python run tests.py

\future plan

*添加自定义列而不是添加聚合模型的一部分工作表更容易
*使用"values\u list"而不是构建模型以提高效率
*提供帮助以将报表生成推迟到GAE任务队列

[生成状态图像]:https://secure.travis-ci.org/potatolond/reportato.png?branch=master
[travis]:http://travis-ci.org/potatoldon/reportato?分支=主

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

推荐PyPI第三方库


热门话题
Java:字符串。RTL设备语言用标志“+”格式化,数字后加符号   java GAE作为桌面应用程序(Swing)的服务提供商   java将InputStream转换为FileInputStream不适用于Apache POI   java外部Voronoi库“网格”:什么是草图和处理?   重载重写的泛型方法java   java显示组织上设置的错误。springframework。验证。jsp中的错误对象   java一些Spring模型属性没有显示在我的JSP中   java无法编译Guava 23的SimpleTimeLimiter示例   java如何更改JTree中的“根”目录名?   java如何在安卓中对相对布局产生连锁反应?   java错误:org。冬眠例外SQLGrammarException:无法提取结果集,dateAccessed是未知列   如何使用java监听JSON文件更新   由抽象封闭类创建的匿名内部类能否通过反射确定实现类?