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目錄下。