Django项目开发规范
Django项目开发顺序:
- 分析项目初步明确:
a. 预估需要引入的第三方开源工具包
b. 明确将要使用的数据库
c. 初步预估项目模块
i. 初步分析数据之间的关系,一对多、多对一、多对多、一对一,
ii. 动态数据与基础静态数据尽可能分离,避免交叉引用
iii. 网页及数据分类 - 基础开发环境初步搭建
a. 开发包安装
b. 创建app,创建需要的文件夹
c. setting初步设置
d. 数据库的准备 - 完成urls.py及View.py文件
a. 确定url的路由设置
b. 写view的基本框架,保证基本的网页链接 - 完善后台管理,填入部分测试数据
a. 完成adminx的设置
b. 填入部分测试数据 - 完成base.html页面
a. 分析所有网页,分类分析,确定主要base页面
b. 预估base页面参数,完成参数的填入 - 逐一完善views.py、forms.py等,直至项目完成
- 分析项目初步明确:
命名规范
● 类名首字母用大写: class AddAskView():
● APP项目名,用小写:userprofile
● 属性名用小写 : user_profile,第一个单词为名词
● 方法用下划线:add_ask,第一个单词为动词
● bool变量为:is_read 或 has_read
● 数据集、列表用:course_dict course_list course_set
● 总数:course_count
● 时长:加上小时或分钟,并以复数形式展现,如course_minutes
开发环境搭建(windows)
pycharm、mysql、navicat、python的安装
- pycharm 官网下载Professional Edition(专业版)
- 百度搜索 mysql for windows,下载mysql,并安装
- 百度搜索 navicat for mysql,下载navicat,并安装
- 百度搜索 python for mysql,下载python2.7 64位安装包
windows下虚拟环境的搭建
- 安装virtualenvwrapper:pip install virtualenvwrapper-win
- 创建虚拟环境:mkvirtualenv 虚拟环境名
- 查看系统已有的虚拟环境:workon
- 进入虚拟环境:workon 虚拟环境名
- 退出当前虚拟环境:deactivate
- 如果需要安装不同版本的python,可以类似下面的命令:
mkvirtualenv -p C:\Python35\python.exe py3scrapy
安装虚拟环境依赖包
- 进入虚拟环境:workon 虚拟环境名
- 安装依赖包,如:
a. pip install django==1.9.8
b. pip install mysql-python 安装如果报错,如error: Microsoft Visual C++ 9.0 is required. Get it from http://aka.ms/vcpython27,可尝试安装驱动
i. 在http://www.lfd.uci.edu/~gohlke/pythonlibs/#mysql-python下载对应的包版本,如果是win7 64位2.7版本的python,就下载MySQL_python-1.2.5-cp27-none-win_amd64.whl,也可以下载:mysqlclient-1.3.12-cp27-cp27m-win_amd64.whl,安装方法同下
ii. 命令行执行pip install MySQL_python-1.2.5-cp27-none-win_amd64.whl,需要在cmd下跳转到下载MySQL_python-1.2.5-cp27-none-win_amd64.whl的目录下
c. pip install pillow 用到ImageField字段,需要安装pillow
d. 其它根据需要安装
项目目录结构
- 新建文件夹apps,同时将文件夹mark成Source Root,用于存放app
a. 创建app,命令:python manage.py startapp app名,并将app移到apps文件夹下
注:python manage.py 可以查看所有项目管理命令 - 新建文件夹static,用于存放静态文件
- 新建文件夹media,用于存放用户上传文件
- 新建文件夹log,用于存放日志文件
- 新建文件夹apps,同时将文件夹mark成Source Root,用于存放app
生产环境配置及布署上线(linux)
一、python安装
下载及解压:
● 查看版本:Linux一般都会预装 Python,但版本比较低,可用python命令查看 python –version
● 下载安装包:wget http://mirrors.sohu.com/python/2.7.13/Python-2.7.13.tgz
● 解压缩:tar -zxf Python-2-7.13.tgz
● 进入到解压缩后的文件夹下,如:cd /usr/local/src/Python-2-7.13编译
- 安装准备准备编译环境
yum install gcc wget # 准备编译环境\安装下载命令 yum install openssl-devel openssl # 保证网络连接 ( 需要安装依赖包 zlib-devel )
二进制文件编译安装Python
- ./configure –prefix=/usr/local/python2.7 #configure 命令执行完之后,会生成一个 Makefile 文件,这个 Makefile主要是被下一步的 make 命令所使用。打开 Makefile你就会发现,里边制定了构建的顺序, Linux 需要按照Makefile 所指定的顺序来构建 (build) 程序组件。
make #实际上编译你的源代码,并生成执行文件。出现如下问题,解决方法
- yum install tcl tcl-devel tk tk-devel # 避免 can’t locate tcl/tk libs and/or headers错误
- yum install zlib-devel zlib # 如果yum install openssl-devel openssl ,无需要安装
- 重新 ./configure –prefix=/usr/local/python2.7 make
- 仍然还有一些包不存在的,可以暂时忽略
make install #实际上是把生成的执行文件拷贝到 linux系统中必要的目录下,比如拷贝到 /usr/local/bin 目录下,这样所有 user就都能运行这个程序了
- 创建链接来使系统默认python变为python2.7 # 可以不修改,实际工作中,用虚拟环境
ln -fs /usr/local/python2.7/bin/python2.7 /usr/bin/python # 建立软链接 - 查看Python版本:python –V
- 创建链接来使系统默认python变为python2.7 # 可以不修改,实际工作中,用虚拟环境
- 修改yum配置(如果上一步修改python软链接,yum可能无法正常运行)
vim /usr/bin/yum
将第一行的 #!/usr/bin/python修改为系统原有的python版本地址#!/usr/bin/python2.6
注:为不对原系统造成影响,也便于使用,可以:
将 /usr/local/python2.7/bin 加入到全局变量中,在文件 /etc/profile 中添加。
export PYTHON2_7=/usr/local/python2.7 export PATH=$JAVA_HOME/bin:$PATH:$PYTHON2_7/bin
二、安装pip
yum安装pip(方法一:此方法pip会默认安装到python2.6,尚不知怎么指定的python2.7)
- 参考:pip源码 https://pypi.python.org/pypi/pip pip文档 https://pip.pypa.io/en/stable/installing/
- 采用Package Managers的方式进行安装:package managers : Installing pip/setuptools/wheel with Linux Package Managers 将pypa-pypa.repo文件存到/etc/yum.repo.d/目录下
- yum安装:
sudo yum install python-pip python-wheel
sudo yum upgrade python-setuptools
推荐:python 安装 pip (方法二) 安装完成后,默认为pip2.7
- 文档:https://pip.pypa.io/en/stable/installing/
- 方法一: python get-pip.py # python用自己想用的python版本,有时会出现下载不成功的情况
- 方法二:https://pypi.python.org/pypi/pip/ 下载二进制包安装:python2.7 setup.py install
- 出现问题的解决办法:根据提示及官方文档提示进行安装。
三、安装python 虚拟环境
- 安装:pip install virturenv
安装:pip install virtualenvwrapper # virtualenvwrapper 是virtualenv的扩展包,要使用 virtualenvwrapper 步骤如下:
此信息来自于文件:/usr/bin/virtualenvwrapper.sh- Create a directory to hold the virtual environments.
(mkdir $HOME/.virtualenvs). - Add a line like “export WORKON_HOME=$HOME/.virtualenvs”
to your .bashrc. - Add a line like “source/usr/local/python2.7/bin/virtualenvwrapper.sh” Add a line like “export VIRTUALENVWRAPPER_PYTHON=/usr/local/python2.7/bin/python” to your .bashrc.
- Run: source ~/.bashrc # 如果还是不能成功,可尝试退出重新登录
- Run: workon
- Create a directory to hold the virtual environments.
主要命令:
列出虚拟环境列表:workon 或 lsvirtualenv
新建虚拟环境:mkvirtualenv [虚拟环境名称]
启动/切换虚拟环境:workon [虚拟环境名称]
删除虚拟环境:rmvirtualenv [虚拟环境名称]
离开虚拟环境:deactivate
注:如果用sudo安装,显示“不在 sudoers 文件中。此事将被报告”,解决方法:
在visudo命令调出的vim编辑窗口中,找到如下行:
root ALL=(ALL:ALL) ALL # 文件中已设
ltf ALL=(ALL:ALL) ALL # 添加需要sudo的用户名(ltf)- 创建虚拟环境:
mkvirtualenv –python=/usr/local/python-2.7.8/bin/python2.7 env1 # –python 指明pyhon的版本
四、安装Nginx
- 配置CentOS第三方yum源 # CentOS默认的标准里没有nginx软件包
- wget http://www.atomicorp.com/installers/atomic #下载
- sh atomic # 更换添加 yum源,用yum list 查看,可以看到,atomic加入到仓库
- sudo yum install -y nginx #yum安装nginx
- sudo service nginx start #启动nginx服务
- 查看进程,如下:
- window下网页测试(chrome浏览器),说明nginx服务启动成功
- sudo chkconfig –level 235 nginx on # 开机自动启动
- 查看进程,如下:
五、安装mysql,并配置mysql
安装并记启动。# 安装前需要把原来的mysql删除干净
- yum install -y mysql mysql-server mysql-devel #安装mysql,默认安装mysql5.5.5
- service mysqld start #启动mysql服务
- 查看进程,如下:
- 设置用户名、密码:mysqladmin -u root password ‘root’
- 进入mysql:mysql -h主机地址 -u用户名-p用户密码 # -h主机地址可省略,默认为本地登录,例:mysql -uroot -proot
c. chkconfig –level 235 mysqld on #开机自动启动
注:chkconfig 可以查看所有启动的服务
- 查看进程,如下:
配置mysql(以mysql 5.5.5为例)
- 若出现错误:can’t connect to MySQL server on ‘192.168.1.64’(10038),可能是防火墙原因
- netstat -ntpl # 查看网络端口信息
- iptables -vnL # 查看防火墙的状态
- iptables -F # 清除防火墙中链中的规则
如下错误:Host ’192.168.1.3′ is not allowed to connect to this MySQL server,解决办法(需要在mysql环境下运行):
- 方法一:root(mysql用户名)使用root从任何主机连接到mysql服务器
1、GRANT ALL PRIVILEGES ON . TO ‘root’@’%’ IDENTIFIED BY ‘root’ WITH GRANT OPTION;
2、FLUSH PRIVILEGES; 方法二:允许用户从ip为192.168.1.3的主机连接到mysql服务器,并使用root作为密码
1、GRANT ALL PRIVILEGES ON . TO ‘root’@’192.168.1.3’ IDENTIFIED BY ‘root’ WITH GRANT OPTION;
2、FLUSH PRIVILEGES;若出现错误:Can’t get hostname for your address,解决方案是修改配置文件
在windows下面,文件是my.ini
在Linux下面,文件是/etc/my.cnf,解决方案是在[mysqld]后面加上:skip-name-resolve
- 方法一:root(mysql用户名)使用root从任何主机连接到mysql服务器
- 若出现错误:can’t connect to MySQL server on ‘192.168.1.64’(10038),可能是防火墙原因
Linux下mysql的卸载:
- 查找以前是否装有mysql
命令:rpm -qa|grep -i mysql - 删除mysql 删除命令:rpm -e –nodeps 包名
- 删除老版本mysql的开发头文件和库
检查各个mysql文件夹是否删除干净
find / -name mysql 如果有,rm -rf 文件夹,强制删除 - 卸载后/var/lib/mysql中的数据及/etc/my.cnf不会删除,如果确定没用后就手工删除
rm -f /etc/my.cnf rm -fr /var/lib/mysql - 删除mysql用户及用户组: userdel mysql groupdel mysql
- 查找以前是否装有mysql
六、安装uwsgi
- 批量安装安装依赖包:
- 在windows下,进入虚拟环境 activate mxonline ,pip freeze >requirements.txt
- 将requirements.txt传到虚拟系统中,
- 进入python虚拟环境中,source activate mxonlinepip
- 批量安装 install -r requirement.txt
- 安装 uwsgi:pip install uwsgi
django-admin.py startproject PROJECT_NAME
python manage.py runserver 0.0.0.0:8000
如果出现错误:Error: That port is already in use,ps aux | grep -i manage ,kill -9 XXX
测试uwsgi:uwsgi –http :8000 –module MxOnline.wsgi
七、项目布署上线
python包安装及项目迁移
以下所有都在python虚拟环境下进行- python开发包安装:开发环境下,获得开发包清单,pip freeze > requirements.txt,在服务器上安装python虚拟环境需要的包:pip install -r requirements.txt
如果出现个别安装包下载非常慢,可以用国内的douban网址下载。如:
pip install -i https://pypi.douban.com/simple pillow ==3.4.1 - 将项目文件夹整体迁移到服务器上;同时在服务器的mysql上建立相同文件名的数据库,将开发环境的数据复制到服务器
- 测试django能否运行 python manage.py runserver 0.0.0.0:8000 ,然后在流览器中用http://192.168.1.64:8000/测试。若成功,可以看到网页
- python开发包安装:开发环境下,获得开发包清单,pip freeze > requirements.txt,在服务器上安装python虚拟环境需要的包:pip install -r requirements.txt
uwsgi安装
- (uwsgi为python的一个开发包) pip install uwsgi
- 测试uwsgi 。如果项目名为 mxonline ,cd mxonline项目目录之下,uwsgi –http :8000 –module mxonline.wsgi,可再打开网页,可能发现静态文件(如样式)不能正常显示。
配置及运行nginx
- 新建文件 uc_nginx.conf (注意:复制下文时,特别要注意不要少了第一个#号)
## the upstream component nginx needs to connect to upstream django { # server unix:///path/to/your/mysite/mysite.sock; # for a file socket server 127.0.0.1:8000 ; # for a web port socket (we'll use this first) } # configuration of the server server { # the port your site will be served on listen 80; # the domain name it will serve for server_name 你的ip地址 域名(可不写) ; # substitute your machine's IP address or FQDN charset utf-8; # max upload size client_max_body_size 75M; # adjust to taste # Django media location /media { alias 你的目录/Mxonline/media; # 指向django的media目录 } location /static { alias 你的目录/Mxonline/static; # 指向django的static目录,不能指向各个app的static } # Finally, send all non-media requests to the Django server. location / { uwsgi_pass django; include uwsgi_params; # the uwsgi_params file you installed } }
将该配置文件加入到nginx的启动配置文件中
sudo ln -s 你的目录/Mxonline/conf/nginx/uc_nginx.conf /etc/nginx/conf.d/
sudo service nginx restart # 重启服务,可能会遇到问题:
nginx: [emerg] open() “/etc/nginx/conf.d/uc_nginx.conf” failed (13: Permission denied) in /etc/nginx/nginx.conf:31
nginx: configuration file /etc/nginx/nginx.conf test failed
解决办法(非root用户要加sudo):
1、vim /etc/nginx/nginx.conf ,将 user nginx ; 改为:user root ;
2、删除nginx 进程:pkill -f nginx
3、重启nginx ,直接用命令:nginx拉取所有需要的static file 到同一个目录
在django的setting文件中,添加下面一行内容,同时需要注释static_files相关内容
STATIC_ROOT = os.path.join(BASE_DIR, “static/”)
运行命令
python manage.py collectstatic- 运行nginx
sudo /usr/sbin/nginx
这里需要注意 一定是直接用nginx命令启动, 不要用systemctl启动nginx,不然可能会有权限问题
配置uwsgi文件启动文件
新建uwsgi.ini 配置文件, 内容如下:
# mysite_uwsgi.ini file [uwsgi] # Django-related settings # the base directory (full path) chdir = /home/bobby/Projects/MxOnline # Django's wsgi file module = MxOnline.wsgi # the virtualenv (full path) virtualenv = /home/bobby/.virtualenvs/mxonline # process-related settings # master master = true # maximum number of worker processes processes = 10 # the socket (use the full path to be safe socket = 127.0.0.1:8000 # ... with appropriate permissions - may be needed # chmod-socket = 664 # clear environment on exit vacuum = true logto = /tmp/mylog.log
注:
chdir: 表示需要操作的目录,也就是项目的目录
module: wsgi文件的路径
processes: 进程数
virtualenv:虚拟环境的目录启动uwsgi
a. uwsgi -i 你的目录/Mxonline/conf/uwsgi.ini & # & 表示后台启动
b. 访问 http://你的ip地址/- 如果要测试域名登录,方法:
a. 修改文件:C:\Windows\System32\drivers\etc\hosts 如果没有权限,修改文件属性,改为用户可修改
b. 添加如:192.168.1.64 www.mxonline.com
c. 如果报错,可能是由于dns缓存造成的(由“DNS Client” 服务导致),解决方法是将hosts文件移出,再移进etc目录下。