ubuntu 12.10 virtualenv & django

 一、安裝apache及apache-python模塊:
  1. sudo apt-get install apache2 
  2. sudo apt-get install libapache2-mod-python2.7 
二、apache python配置
  1. vim /etc/apache2/conf.d/charset,取消AddDefaultCharset UTF-8的註釋 
  2.  
  3. vim /etc/apache2/mods-available/python.conf,添加: 
  4. <Directory /var/www/py> 
  5.         AddHandler mod_python .py  
  6.         AddType text/html  .py  
  7.         PythonHandler pytest 
  8.         PythonDebug On        
  9. </Directory> 
  10.  
  11. sudo ln -s /etc/apache2/mods-available/python.conf /etc/apache2/mods-enabled/python.conf 
  12.  
  13. sudo vim /etc/apache2/sites-available/python,內容如下:    
  14. <VirtualHost *:80>  
  15.     DocumentRoot /var/www/py 
  16.     ServerName py   
  17.  
  18.     <Directory /var/www/py> 
  19.          AddHandler mod_python .py  
  20.          PythonHandler pytest 
  21.          PythonDebug On 
  22.      </Directory> 
  23. </VirtualHost> 
  24.  
  25. ln -s /etc/apache2/sites-available/python /etc/apache2/sites-enabled/python 
  26.  
  27. mkdir -p /var/www/py 
  28. chown -R www-data:www-data /var/www/py    //用戶apache運行的用戶,默認是www-data 
  29. chmod -R 775 /var/www/py 
  30. sudo adduser dave www-data 
  31.  
  32. sudo service apache2 restart 
  33. 訪問:http://127.0.0.1 
三、測試是否成功:
    sudo vim /var/www/py/pytest.py,注意要與<Directory>裏的PythonHandler pytest名稱相同:   
  1. #!/usr/bin/python  
  2. # -*- coding:utf-8 -*- 
  3. from mod_python import apache  
  4.  
  5. def handler(req): 
  6.         req.content_type = 'text/html'     //請求對象的類型 
  7.         req.write('<h1>hello!</h1>')      //req是請求對象,它有一個專有方法:write 
  8.         return apache.OK  
  9.  
  10. chown -R www-data:www-data pytest.py  
  11. chmod 775 pytest.py 
  12.  
  13. sudo service apache2 restart 
  14. 訪問:http://127.0.0.1/py/pytest.py 
四、virtualenv安裝與配置
  1. sudo apt-get install -y python-dev python-setuptools 
  2. sudo easy_install virtualenv virtualenvwrapper pip 
  3.  
  4. sudo mkdir /home/dave/study/webapps    //所有virtualenv環境的工作總目錄  
  5. sudo chown -R www-data:www-data /home/dave/study/webapps 
  6. sudo chmod -R g+rw /home/dave/study/webapps 
  7.  
  8. 添加如下行到~/.bashrc: 
  9. export VIRTUALENV_USE_DISTRIBUTE=1 
  10. export WORKON_HOME=/home/dave/study/webapps 
  11. source /usr/local/bin/virtualenvwrapper.sh 
  12. export PIP_VIRTUALENV_BASE=$WORKON_HOME 
  13. export PIP_RESPECT_VIRTUALENV=true 
  14. export PYTHONPATH=/usr/local/lib/python2.7:$PYTHONPATH 
  15.  
  16. 然後source ~/.bashrc,如果報錯,查看目錄屬主和權限 
    創建虛擬環境,並安裝相關軟件:
  1. cd ~/study/webapps  
  2. mkvirtualenv firstenv 
  3. pip install "django==1.4.5", 
  4. pip install MySQL-python     
  5. //在虛擬環境中安裝相關軟件,注意,安裝mysql-python之前,首先要sudo apt-get install python-dev libmysqlclient-dev,否則會安裝失敗 
  6.  
  7.   
  8. 查看django是否安裝成功:  
  9. python,進入idle  
  10. >>import django  
  11. >>print django.VERSION  
  12.     1.4.5 
  virtualenvwrapper常規用法,參考:http://www.cnblogs.com/Phenix_Yang/archive/2012/05/08/2489724.html:    
  1. cd webapps 
  2. mkvirtualenv  NAME    //創建虛擬環境 
  3. rmvirtualenv  NAME    //刪除虛擬環境 
  4. lsvirtualenv     //列出所有虛擬環境 
  5. workon  NAME     //進入指定虛擬環境,如果不指定NAME,則列出所有的虛擬環境 
  6. deactivate       //退出當前虛擬環境 
pip常規用法:
    pip安裝軟件時,都是到pypi網站中去找,而pypi只蒐集軟件包的鏈接,問題在於鏈接可能失效,所以pip也是有坑的。
  1. pip freeze                      //列出所有已經安裝的軟件包  
  2. pip search django               //查找名字中帶django的軟件包  
  3. pip install django              //安裝django,默認安裝最新版  
  4. pip install "django==1.4.5"    //安裝軟件包時指定版本,還可以使用<<=、>>=來指定版本範圍,如pip install "django>1.4 <1.5"  
  5. pip install -U django           //升級django  
  6. pip uninstall django            //卸載django 
 五、在virtualenv中創建django項目和應用:
    django版本:1.4.5
    網絡上的django文章,大部分都是比較老的,可以參考,但是最好還是去看官方文檔。    
    1、進入虛擬環境,並創建一個項目:
  1. workon firstenv  
  2. cd firstenv  && django-admin.py startproject mysite   
  3.     
  4. //startproject命令 創建一個名爲mysite的項目,項目的目錄名稱也是mysite,位於firstenv目錄下  
  5. //mysite目錄結構:  
  6.     mysite/  
  7.         manage.py  
  8.         mysite/  
  9.             __init__.py  
  10.             settings.py  
  11.             urls.py  
  12.             wsgi.py 
    最外層的那個mysite/,是項目mysite的目錄,目錄下包括一個manage.py命令行工具和一個mysite的目錄
    裏層的那個mysite/,目錄下有一個__init__.py,說明它是一個python包,使用時像一般的python包一樣導入,如:import mysite.settings
    
    2、啓動內置web服務器進行測試:
    python manage.py runserver
    訪問:http://127.0.0.1:8000
    //爲了方便開發,django內置了一個輕量級的web服務器,它可以監測代碼的變動,自動reload,使我們在開發時可以直接修改代碼而不需要重啓web服務。但是不要把它部署到生產環境中。
    //新增文件不能觸發reload,需要重啓web服務
    
    3、配置數據庫和TimeZone:
    vim firstenv/mysite/mysite/settings.py,
    修改DATABASES配置段,略
    修改TimeZone配置段,略
    修改完成後,運行如下命令爲項目在數據庫中創建相應表:python manage.py syncdb
    
    4、創建一個應用(app):
    在manage.py的同級目錄下執行命令:python manage.py startapp polls
    //也可以把app創建到項目目錄下,做爲mysite的子模塊
    //項目與應用(project和app),一個web站點的project,是該站點的一系列app和配置文件的集合;app是實現站點某一功能的python包。
    //project的配置文件爲apps提供了一個運行環境,project下的多個app可以共用project的配置信息,如數據庫配置、模板位置等。
    
    5、把app註冊到settings,在INSTALLED_APPS配置段中末尾添加前面創建的app:polls,如下:
  1. vim firstenv/mysite/mysite/settins, 
  2.  
  3. INSTALLED_APPS = (  
  4.     ...  
  5.     ...  
  6.     'polls',  
    
    6、創建數據模型(Model):   
  1. vim firstenv/mysite/polls/models.py,輸入: 
  2.  
  3. class Poll(models.Model):  
  4.     question = models.CharField(max_length=200
  5.   pub_date = models.DateTimeField('date published'
  6.  
  7.     def __unicode__(self):  
  8.         return self.question 
  9.  
  10. class Choice(models.Model): 
  11.     poll = models.ForeignKey(Poll) 
  12.     choice = models.CharField(max_length=200
  13.   votes = models.IntegerField() 
  14.  
  15.     def __unicode__(self): 
  16.         return self.choice 
     //上述類創建兩個數據模型:Poll和Chioce
    //Model是存在於應用(app)之中的,因此要使用數據模型要首先創建django應用
    //每一個model類,可以認爲是一個數據庫表,每一個model類包含了一些參數,如前面的question、pub_date等,這些參數代表着數據庫表的一個個字段;數據庫使用前面在settings中定義的數據庫
    //models.CharField、models.IntegerField等,指定了字段的類型
    //ForeignKey指定了外鍵約束關係
    
    把數據模型同步到數據庫:    
  1. python firstenv/mysite/manage.py validate  //驗證創建的數據模型是否有效無誤
  2.  
  3. python firstenv/mysite/manage.py sqlall polls  
  4.   //查看把數據模型提交給數據庫時執行的sql語句,它並沒有真正執行sql語句 
  5. //查看一下這裏的顯示,表名會自動轉換成小寫;數據模型會自動創建主鍵ID;外鍵約束字段名末尾會自動添加'_id' 
  6.  
  7. python firstenv/mysite/manage.py syncdb 
  8. //把數據模型提交給數據庫,創建相應的表 
  9. //這條命令可以執行任意次數,它只創建庫中沒有的表,同名表不會執行創建動作 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章