我想知道是否有基于django,甚至基于Python的Reporting Services ala JasperReports或SQL Server Reporting Services?
基本上,我希望能够创建报告,将其作为CSV或HTML或PDF格式的电子邮件发送出去,而无需编写报告代码。即使我不得不编写报告代码,我也不介意,但是整个框架与时间表等等都会很好!
PS。我知道我可以使用Django Apps来实现它,但我希望是否有任何集成的解决方案,甚至是Pinax或Satchmo这样的项目,它们汇集了所需的应用程序。
PPS:它必须解决Postgres
答案 0 :(得分:4)
“我希望能够创建报告......而无需编写报告代码”
我也是。不过,可悲的是,每份报告似乎都是独一无二的,需要自定义代码。
从Django模型到CSV很容易。从一些报告开始。
import csv
from myApp.models import This, That, TheOther
def parseCommandLine():
# setup optparse to get report query parameters
def main():
wtr= csv.DictWriter( sys.stdout, ["Col1", "Col2", "Col3"] )
this, that = parseCommandLine()
thisList= This.objects.filter( name=this, that__name=that )
for object in thisList:
write.writerow( object.col1, object.that.col2, object.theOther.col3 )
if __name__ == "__main__":
main()
HTML很简单 - Django有一个HTML模板语言。您只需渲染模板并将其写入stdout,而不是render_to_response。有趣的是,算法的核心与编写CSV非常相似。足够相似 - 没有太多聪明 - 你应该有一个设计模式同时做到这两点。
让CSV工作后,使用Django的模板添加HTML。
PDF更难,因为您必须在某些细节上实际制定格式。这有很多Python库。然而,有趣的是,PDF编写的整体模式与CSV和HTML编写非常相似。
通过电子邮件发送意味着直接使用Python的smtplib或Django的email包。这不是太难。所有部分都在那里,您只需要将上面生成的输出文件通过电子邮件发送到某个分发列表。
调度需要一点思考才能充分利用crontab
。这可能是这项工作中最难的部分。
答案 1 :(得分:3)
我只是在经过一番调查后才想到我会报告我的发现......
http://code.google.com/p/django-reporting/ - 我认为这个项目看起来像是我需要的很多功能的一个很棒的候选者。不幸的是,它的Django 1.1在撰写本文时(2009年4月29日)尚未发布。至少能够在没有太多代码的情况下创建报告。
http://code.google.com/p/django-cron/ - 看起来很有希望安排没有cron访问的工作
http://www.xhtml2pdf.com/ - 可以使用或ReportLabs PDF库将HTML转换为PDF
所有这些与Django的电子邮件功能一起构成了一个很好的报告系统。