今天来讲讲如何以正确的方式开始Django(v1.7.6)项目
目录:
- virtualenv
- virtualenvwrapper
- django-admin.py创建项目
- 增加requirements.txt
- 增加README.md
- 增加.gitignore文件
- 同步数据库
一、virtualenv
-
什么是virtualenv?
virtualenv用于在一台机器上创建多个独立的python运行环境,类似于一个个沙盒环境。作用:在一个机器上创建出相互隔离,互不影响的Python环境。例如:A项目依赖django v1.4.9 而项目B依赖django v1.7.6 。这种情况下如果用同一个全局环境,项目切换将十分痛苦。而virtualenv就是来解决这个问题的。
- 安装virtualenv
sudo pip install virtualenv
- 创建虚拟环境
-
virtualenv env1 #创建一个名字为env1的 虚拟环境
- 启动续集环境
cd env1 source ./bin/activate 注意此时命令行会多一个(env1),ENV为虚拟环境名称,接下来所有模块都只会安装到该目录中去
二、使用virtualenvwrapper管理虚拟环境
- 什么是virtualenvwrapper?
Virtaulenvwrapper是virtualenv的扩展包,用于更方便管理虚拟环境,它可以做:
1) 将所有虚拟环境整合在一个目录下
2)管理(新增,删除,复制)虚拟环境
3)切换虚拟环境
4)…
- 安装virtualenvwrapper
sudo pip install virtualenvwrapper #安装virtualenvwrapper mkdir $HOME/.virtualenvs echo export WORKON_HOME=$HOME/.virtualenvs>>~/.bashrc echo source /usr/local/bin/virtualenvwrapper.sh>>~/.bashrc source ~/.bashrc
- 简单使用virtualenvwrapper
新建/激活/关闭/删除虚拟空间需要执行下面的命令:
mkvirtualenv quxl #创建quxl虚拟环境 workon quxl #切换到quxl虚拟环境 deactivate #从虚拟环境中退出 rmvirtualenv quxl #删除quxl虚拟环境
三、django-admin.py创建项目
- 创建新虚拟环境
quxl:~ quxl$ mkvirtualenv quxl #创建新虚拟环境quxl New python executable in quxl/bin/python #可以看到 这里正在创建新python环境 Installing setuptools, pip...done. #正在安装 setuptools&pip (quxl)quxl:~ quxl$ #已经进入虚拟环境啦
- 安装依赖库
pip install django==1.7.6 #安装当前最高版本1.7.6 (实际上1.8.1 已经出了,但尚未发布) pip isntall MySql-python==1.2.5 #安装mysql驱动 如果用其他数据库,安装对应的驱动 pip install markdown #因为我是一直写RESTful APIs,就用这个库来写文档 pip install djangorestframework #RESTful APIs 的主角
四、为每个项目增加requirements文件
部署文件(requirements.txt)中储存的是该django项目的依赖库, 一般使用pip freeze –local生成. 本着”只安装需要的模块”的原则, 不同的设 置文件, 应当对应不同的requirements.txt文件. 就像分离式的settings文件一样, 我们使用分离式的requirements文件. 建立requirements目录:
requirements/ base.txt local.txt production.txt
在base.txt中, 储存的是所有开发环境中都会用到的依赖库, 例如:
Django==1.7.6 Markdown==2.6.1 MySQL-python==1.2.5 djangorestframework==3.1.0
在local.txt中, 储存的是本地开发时用到的依赖库:
# 导入base.txt中的依赖库 -r base.txt coverage==3.7.1 django-debug-toolbar==1.2
当重新配置本地开发环境时, 可以使用以下代码安装依赖库:
pip install -r requirements/local.txt
五、为每个项目增加README.md
README.md文件是一个符合markdown语法的文本文件。为了来说明项目细节,可以介绍下项目背景以及一些注意的地方或者运行方式等等。总是为了方便人们理解项目的。最好为每个经手的项目增加该文件,方便自己或者后来维护者理解项目。相信我别人看到这个文件会感谢你的。
六、增加.gitignore文件,如果使用git作为版本代码仓库
.gitignore文件是git的忽略文件。在提交代码的时候该文件里标出的文件将不被提交。这里给出一份我自己的.gitinore文件清单:
.DS_Store log/*.log .project .pydevproject *.pyc .gitignore my_settings.py *.pid *.sock *.ini
总有很多新手在提交代码的时候没有用git status 检查提交内容的习惯。最后导致自己的pyc文件和本地ini文件被提交到了服务器。这对整个团队来说是十分操蛋的。碰到这种事只能暗暗的说声,靠~所以这个文件无比保证每个开发者正确配置。
七、同步数据库
在django1.7之前,同步数据库的命令为 python manage.py syncdb 。但在数据库创建之后再对model增加字段,此时就十分蛋疼,syncdb 无法识别model的改动,那么就要求我们自己手工同步或者用工具同步。还好django1.7 是数据库同步更加强大了。主命令如下:
- migrate: 用于执行迁移动作
- makemigrations: 基于当前的model创建新的迁移策略文件
- sqlmigrate: 显示迁移的SQL语句
值得注意的是, migration是基于App的, 因此, 我们可以针对某些app不启用migration功能.
这些东西今天先点到为止,以后会有文章详细介绍每个点。