6.1           安装mod_python

安装模块

 

$ sudo apt-get install libapache2-mod-python

6.2  配置Apache

mod-python模块安装后还需要配置apache,使apache能够处理Python文件。有两种方法1Publisher Handler(默认),让apache可以处理.py为扩展名的纯python脚本,另一种是PSP Handler,可以像aspphp一样在html中嵌入python代码,扩展名是.psp

 

6.2.1          Publisher Handler

虚拟主机的配置,添加以下3

AddHandler mod_python .py

PythonHandler mod_python.publisher

PythonDebug On

修改后的虚拟主机配置文件类似如下

 [...]

        <Directory /var/www/>

                Options Indexes FollowSymLinks MultiViews

                AllowOverride None

                Order allow,deny

                allow from all

                AddHandler mod_python .py

                PythonHandler mod_python.publisher

                PythonDebug On

        </Directory>

[...]

重启apache服务器

$ sudo /etc/init.d/apache2 restart

   创建测试页

$ sudo nano /var/www/test.py

测试页内容

def index(req):

  return "Hello World";

6.2.2          PSP Handler

虚拟主机的配置,添加以下3

AddHandler mod_python .psp

PythonHandler mod_python.psp

PythonDebug On

修改后的虚拟主机配置文件类似如下

 [...]

        <Directory /var/www/>

                Options Indexes FollowSymLinks MultiViews

                AllowOverride None

                Order allow,deny

                allow from all

                AddHandler mod_python .psp

                PythonHandler mod_python.psp

                PythonDebug On

        </Directory>

[...]

重启apache服务器

$ sudo /etc/init.d/apache2 restart

创建测试页

$ sudo nano /var/www/test.psp

       测试页内容

<html>

<body>

<h1><% req.write("Hello, PSP World") %></h1>

</body>

</html>

6.3             Python支持MySQL

Ubuntu提供了一个软件包,python-mysqldb,可以让python轻松支持mysql数据库

安装

 

$ sudo apt-get install python-mysqldb

6.3.1          Python连接MySQL数据库测试

创建测试页面

$ sudo nano /var/www/dbtest.py

测试页面内容

#!/usr/bin/python

 

# 导入数据库模块

import MySQLdb

 

# 连接数据库

db = MySQLdb.connect(host="localhost",user="username",passwd="password",db="mydb"
)

 

# 创建一个游标

cursor = db.cursor()

 

# 执行 SQL 语句

cursor.execute("SELECT name, mail FROM users")

 

# 获取查询结果(数组)

result = cursor.fetchall()

 

# 打印查询结果

for record in result:

print record[0] , "-->", record[1]

测试

$ python /var/www/dbtest.py

Hiweed --> hiweed@test.com

Ning --> ning@test.com

Guoce --> guoce@test.com

6.3.2          PythonCGI程序

上面的测试页面不符合CGI规范,在printf前加上以下内容使其遵循CGI规范

print "Content-type:text/html\n"

       修改后的测试页面如下

#!/usr/bin/python

 

import MySQLdb

db = MySQLdb.connect(host="localhost",user="username",passwd="password",db="mydb"
)

cursor = db.cursor()

cursor.execute("SELECT name, mail FROM users")

result = cursor.fetchall()

 

print "Content-type:text/html\n"

 

for record in result:

print record[0] , "-->", record[1]

       复制到网站目录

$ sudo cp /var/www/dbtest.py /usr/lib/cgi-bin/test/

给予执行权限

$ sudo chmod 755 /usr/lib/cgi-bin/test/dbtest.py

6.4  实例:用Django开发Web应用程序

 

Django本身是一个Python编写的Web应用程序框架;通过Django可以避免很多代码重复编码的开发,快速开发出基于PythonWeb应用程序

6.4.1          安装Django

安装Django

$ sudo apt-get install python-django

6.4.2          创建自己的Django项目

在家目录下创建名为mysiteDjango项目

$ cd ~

$ django-admin startproject mysite

命令很快完成了,并创建了下面的文件

mysite/

    init__.py            <-- 该文件告诉Python,此目录是一个Python Package

    manage.py            <-- 本项目的命令行管理工具

    settings.py      <-- 本项目的配置文件

    urls.py          <-- 用以设置URL的对应关系和样式

6.4.3          运行Django开发服务器

Django自己带了一个Web服务器,避免开发过程去考虑apache等的配置。创建项目时生成的manage.py即可运行Web服务器。

下面运行manage.py时一定带上ip地址,否则监听在127.0.0.1地址上,其他测试机不能访问

$ cd ~/mysite

$ manage.py runserver 192.168.1.10:8000

Validating models...

0 errors found.

 

Django version 0.96.1, using settings 'mysite.settings'

Development server is running at http://192.168.1.10:8000/

Quit the server with CONTROL-C.

6.4.4          连接MySQL数据库

修改settings.py以连接数据库

DATABASE_ENGINE = 'mysql'

DATABASE_NAME = 'mydb'

DATABASE_USER = 'username'

DATABASE_PASSWORD = 'password'

DATABASE_HOST = 'localhost'

配置后让Django进行数据库初始化

$ python manage.py syncdb

查看数据库中的信息

$ mysql -uusername -ppassword mydb

mysql> show tables;

+----------------------------+

| Tables_in_mydb               |

+----------------------------+

| auth_group                    |

| auth_group_permissions      |

| auth_message                  |

| auth_permission              |

| auth_user                     |

| auth_user_groups             |

| auth_user_user_permissions |

| django_content_type         |

| django_session               |

| django_site                   |

| users                          |

+----------------------------+

11 rows in set (0.00 sec)

文章整理来自于《Ubuntu Server最佳方案》书籍

由于字数限制,笔记可能无法全部上传,请下载笔记