http://blog.chedushi.com/archives/4490
永远使用virtualenv+pip,否则你就是在给自己埋地雷
如果你做过django的网络开发和部署,你可能会感慨程序员的生活有多苦逼,隔离的python运行环境就有多重要。virtualenv提供的隔离环境可以保证你的项目之间依赖包之间不会冲突,而pip提供的简单的包管理以及一条命令的服务器python环境部署更省去了我等程序员几百年的部署时间,人生苦短,远离代码 。好处太多,用过了才知道,具体的一个简单教程可以参见这篇beginner’s guid, pip and virtualenv。
项目要有良好的目录结构
你还在用 django-admin.py startproject mysite 创建项目么?你知道,如果你只是开发这个站点在本机给自己玩儿的话,那么可以继续使用… 如果你是想部署一个容易维护和发布的站点,你就可以考虑开始尝试一些已经被证实了的有用的项目目录结构的模板。
一般来讲,对于一个完整的项目,大致应该有这样的目录结构:
Your project Name /apps /configs /configs/local /configs/stage /configs/deploy /settings /settings/common /settings/local /settings/stage /settings/deploy /static /templates /deploy
- apps: 可以存放你所有的apps,比如apps/accounts, apps/profiles, apps/avatar etc..
- configs: 主要存放你在本地,stage服务器和deploy服务器上的服务器配置文件,比如ngnix,gunicorn等
- settings: 存放本地,stage服务器和deploy服务器上的settings.py 和urls.py。这儿有一个common文件夹,用来存放这三台机器上settings.py, urls.py共用的部分。
- static: 存放css/image/js文件
- templates: 存放django中的模板文件
- deploy: 如果你使用fabric,那这儿就可以存放fabric的脚本文件,如果你还没有使用过fabric,自己面壁思过直到你的服务器自己发布完成。
这儿有一些开源的项目目录结构的模板,比如django-startproject (推荐),*或者django-base-template, *还有mozilla的playdoh (*来自tioover童鞋推荐)。
使用异步任务和搜索引擎
- 使用Celery完成异步执行的任务:Celery是一个非常优秀的异步任务队列系统,所以你不必在等待任务完成之后才返回用户响应页面,可以把所有的事情都交给celery,他会异步后台执行。特别适合比如创建图片的缩略图等一些应用。可以使用redis或者RabbitMQ后端。
- 使用haystack+solr:如果你要开发自己的网站搜索引擎,可以考虑使用haystack+solr。instagram就在使用apache solr作为搜索引擎。如果中文语言的话,需要一些分词的插件,比如:IKAnalyzer。
不要花时间去造轮子
造轮子是一件非常无趣的事情,往往花很多的时间造好了,结果发现有更多更好看的轮子就在你旁边看着你笑。笑的你茫然不知所措瞬间都开始怀疑人生。。。所以,当你需要造一个轮子的时候,先去github上或者django packages找找有没有已经造好的轮子。这是一件非常重要的事情,往往会省掉你开发中的大半时间(想自虐的除外)
使用gunicorn和nginx
gunicorn配置非常简单,而且原生支持django(instagram就在使用gunicorn和nginx),性能也很不错。如果你不是有特别的需求,可以考虑使用nginx+gunicorn。这儿有一篇文章 A django set up with gunicorn and nginx。
你的django最佳实践?
你的最佳实践是? 可以考虑在评论中写出来,让更多的人看到。没有意义的回复会被删除,请回复有用信息。
No related posts.
Categories: Develop.
— July 12, 2012 at 3:35 pm
个人观点,django apps的更为妥当的的存放方法是每一个django app当做一个python module来存放,需要引入的时候用pip install,同时用requirements.txt来管理版本。
如果有多个相关的django apps,可以用namespace package或者其他办法来管理。
仅供参考。
原文:http://404think.com/django-best-practice/