使用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?分支=主
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
导入ModelReporter
from.models导入记者
class journalistreporter(modelreporter):
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
>;
``
在
创建期间,使用"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?分支=主