一、安裝apache及apache-python模塊:
sudo apt-get install apache2 sudo apt-get install libapache2-mod-python2.7
二、apache python配置
vim /etc/apache2/conf.d/charset,取消AddDefaultCharset UTF-8的註釋 vim /etc/apache2/mods-available/python.conf,添加: <Directory /var/www/py> AddHandler mod_python .py AddType text/html .py PythonHandler pytest PythonDebug On </Directory> sudo ln -s /etc/apache2/mods-available/python.conf /etc/apache2/mods-enabled/python.conf sudo vim /etc/apache2/sites-available/python,內容如下: <VirtualHost *:80> DocumentRoot /var/www/py ServerName py <Directory /var/www/py> AddHandler mod_python .py PythonHandler pytest PythonDebug On </Directory> </VirtualHost> ln -s /etc/apache2/sites-available/python /etc/apache2/sites-enabled/python mkdir -p /var/www/py chown -R www-data:www-data /var/www/py //用戶apache運行的用戶,默認是www-data chmod -R 775 /var/www/py sudo adduser dave www-data sudo service apache2 restart 訪問:http://127.0.0.1
三、測試是否成功:
sudo vim /var/www/py/pytest.py,注意要與<Directory>裏的PythonHandler pytest名稱相同:
#!/usr/bin/python # -*- coding:utf-8 -*- from mod_python import apache def handler(req): req.content_type = 'text/html' //請求對象的類型 req.write('<h1>hello!</h1>') //req是請求對象,它有一個專有方法:write return apache.OK chown -R www-data:www-data pytest.py chmod 775 pytest.py sudo service apache2 restart 訪問:http://127.0.0.1/py/pytest.py
四、virtualenv安裝與配置
sudo apt-get install -y python-dev python-setuptools sudo easy_install virtualenv virtualenvwrapper pip sudo mkdir /home/dave/study/webapps //所有virtualenv環境的工作總目錄 sudo chown -R www-data:www-data /home/dave/study/webapps sudo chmod -R g+rw /home/dave/study/webapps 添加如下行到~/.bashrc: export VIRTUALENV_USE_DISTRIBUTE=1 export WORKON_HOME=/home/dave/study/webapps source /usr/local/bin/virtualenvwrapper.sh export PIP_VIRTUALENV_BASE=$WORKON_HOME export PIP_RESPECT_VIRTUALENV=true export PYTHONPATH=/usr/local/lib/python2.7:$PYTHONPATH 然後source ~/.bashrc,如果報錯,查看目錄屬主和權限
創建虛擬環境,並安裝相關軟件:
cd ~/study/webapps mkvirtualenv firstenv pip install "django==1.4.5", pip install MySQL-python //在虛擬環境中安裝相關軟件,注意,安裝mysql-python之前,首先要sudo apt-get install python-dev libmysqlclient-dev,否則會安裝失敗 查看django是否安裝成功: python,進入idle >>import django >>print django.VERSION 1.4.5
virtualenvwrapper常規用法,參考:http://www.cnblogs.com/Phenix_Yang/archive/2012/05/08/2489724.html:
cd webapps mkvirtualenv NAME //創建虛擬環境 rmvirtualenv NAME //刪除虛擬環境 lsvirtualenv //列出所有虛擬環境 workon NAME //進入指定虛擬環境,如果不指定NAME,則列出所有的虛擬環境 deactivate //退出當前虛擬環境
pip常規用法:
pip安裝軟件時,都是到pypi網站中去找,而pypi只蒐集軟件包的鏈接,問題在於鏈接可能失效,所以pip也是有坑的。
pip freeze //列出所有已經安裝的軟件包 pip search django //查找名字中帶django的軟件包 pip install django //安裝django,默認安裝最新版 pip install "django==1.4.5" //安裝軟件包時指定版本,還可以使用<、<=、>、>=來指定版本範圍,如pip install "django>1.4 <1.5" pip install -U django //升級django pip uninstall django //卸載django
五、在virtualenv中創建django項目和應用:
django版本:1.4.5
網絡上的django文章,大部分都是比較老的,可以參考,但是最好還是去看官方文檔。
1、進入虛擬環境,並創建一個項目:
workon firstenv cd firstenv && django-admin.py startproject mysite //startproject命令 創建一個名爲mysite的項目,項目的目錄名稱也是mysite,位於firstenv目錄下 //mysite目錄結構: mysite/ manage.py mysite/ __init__.py settings.py urls.py 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,如下:
vim firstenv/mysite/mysite/settins, INSTALLED_APPS = ( ... ... 'polls', )
6、創建數據模型(Model):
vim firstenv/mysite/polls/models.py,輸入: class Poll(models.Model): question = models.CharField(max_length=200) pub_date = models.DateTimeField('date published') def __unicode__(self): return self.question class Choice(models.Model): poll = models.ForeignKey(Poll) choice = models.CharField(max_length=200) votes = models.IntegerField() def __unicode__(self): return self.choice
//上述類創建兩個數據模型:Poll和Chioce
//Model是存在於應用(app)之中的,因此要使用數據模型要首先創建django應用
//每一個model類,可以認爲是一個數據庫表,每一個model類包含了一些參數,如前面的question、pub_date等,這些參數代表着數據庫表的一個個字段;數據庫使用前面在settings中定義的數據庫
//models.CharField、models.IntegerField等,指定了字段的類型
//ForeignKey指定了外鍵約束關係
把數據模型同步到數據庫:
python firstenv/mysite/manage.py validate //驗證創建的數據模型是否有效無誤 python firstenv/mysite/manage.py sqlall polls //查看把數據模型提交給數據庫時執行的sql語句,它並沒有真正執行sql語句 //查看一下這裏的顯示,表名會自動轉換成小寫;數據模型會自動創建主鍵ID;外鍵約束字段名末尾會自動添加'_id' python firstenv/mysite/manage.py syncdb //把數據模型提交給數據庫,創建相應的表 //這條命令可以執行任意次數,它只創建庫中沒有的表,同名表不會執行創建動作