一、安装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,注意要与里的PythonHandler pytest名称相同:
-
#!/usr/bin/python
-
# -*- coding:utf-8 -*-
-
from mod_python import apache
-
-
def handler(req):
-
req.content_type = 'text/html' //请求对象的类型
-
req.write('
hello!
') //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
-
//把数据模型提交给数据库,创建相应的表
-
//这条命令可以执行任意次数,它只创建库中没有的表,同名表不会执行创建动作