gitweb本身是一个perl写的cgi脚本,我把他嵌入到django中的主要目的就是可以实现一些定制,比如可以在views里做到权限控制,定制输出等。
主要是用python的subprocess去调用执行这个cgi,然后得到输出后,处理一下后用django的HttpResponse输出网页内容。哈哈 说起来一开始还不怎么会调用,然后居然去看了python的CGIHTTPServer的源代码,照着抄了一些才搞成功。
如果想要在git push后自动通知团队中的其他成员,可以利用git的hook脚本,git源代码里 contrib/hooks/post-receive-email 就可以直接用来发送邮件通知。
如果觉得邮件还不够即时,可以试试利用gae发送通知到gtalk上,google提供了很方便的api,可以通过部署在gae上的程序发送xmpp协议的即时消息。
我无聊写了个这样的小程序,放在github上了,用的是Python版的GAE SDK。
使用方法:
下载后,先把gae目录中的程序部署到gae上,然后可以访问 domain/sendim/invite 向所需通知的用户发一个邀请,然后可以访问 domain/sendim/demo 测试下消息是否能够正常发送。
更新 2010/3/14:
推荐使用原生vim脚本写的Zen coding插件,无须调用外部程序。
Zen Coding? 其实我看下来有点类似snippet的代码模板,用来提高编码效率,但是 Zen Coding 是针对html编写的,可以用一系列快捷的方式生成html代码,从而提高编码的效率,并且感觉还挺有乐趣的。
只要在 PYTHONPATH 中的程序,用Vim的时候就能够使用omni智能提示功能。
最近新学django,所以把用django-admin 生成的项目目录加入到PYTHONPATH,这样就能使用Vim的omni对这个项目里的模块实现代码提示功能了。
但是用了不久后,发现对某些模块操作时omni功能失效了- -,研究了一下发现是只要导入了django.db.models的模块,智能提示就会失效。
然后我在终端的python中单独导入django 的 models 模块,发现会有异常,原因是那个 django.db 里面会导入 django.conf.settings 对象,然后还会去设置他的属性,这一下就玩完了,因为那里面会检查系统的 DJANGO_SETTINGS_MODULE 值,可以在django/conf/__init__.py中的LazySettings这个类里看到,如果没的话就有异常了。
这个系统值应该是启动server的时候设置的,可以在manager.py里面看到。
这样一来肯定是由于Vim的python omni程序导入模块时一旦碰到异常就不继续了,所以智能提示失效了。
为此我在导入django的models时做了下处理