分类存档: 文档翻译

debian(linux) 配置 apache+django+mysql

蓝色字体为本人注解

原文出自:How To Install Django On Debian Etch (Apache2/mod_python)

1 安装 MySQL

Django 可以使用多种类型的数据库, 例如:. PostgreSQL, MySQL, SQLite, etc. 如果你打算使用mysql,可以按照一下步骤操作:

apt-get install mysql-server mysql-client #debian的apt工具真牛!

我们希望mysql可以通过多种接口连接, 不单单localhost方式链接, t要实现这点,我们需要修改/etc/mysql/my.cnf 把里面的bind-address = 127.0.0.1注释掉:

vi /etc/mysql/my.cnf

[...]# Instead of skip-networking the default is now to listen only on# localhost which is more compatible and is not less secure.#bind-address           = 127.0.0.1[...]

#我这样做了,但是感觉没什么用,局域网内的其他机子还是不能访问

然后,重启mysql:

/etc/init.d/mysql restart

现在,我们修改下网络设置

netstat -tap | grep mysql

输出应该是这样的:

server1:~# netstat -tap | grep mysql
tcp 0 0 *:mysql *:* LISTEN 3085/mysqld
server1:~#

继续

mysql -u root password yourrootsqlpassword
mysql -h server1.example.com -u root password yourrootsqlpassword

给root用户设置一个密码 (不然任何用户都能登录你的mysql数据库了!)

2 安装 Apache 和 mod_python

如果apache和mod_python还没有安装到服务器上去,你可以安装下面步骤进行安装:

apt-get install apache2 apache2-doc apache2-mpm-prefork apache2-utils libexpat1 ssl-cert libapache2-mod-python

3 安装 Django

#前提是python要安装,版本要和django对应,debian默认安装的是python2.4,即使安装了python2.5,对应的软链接还是指向python2.4的,即使修改了也没用。这里我的解决方法是,升级debian

apt-get update

apt-get dist-upgrade

之后继续安装django就可以了

为了同时安装django和python_mysqldb,我们运行下面命令:

apt-get install python-django python-mysqldb

4 设置Apache

#这里是关键中的关键

使用 /var/www 作为apache的根目录(#默认就是如此,不用设置)

使用/etc/apache2/sites-available/default 做虚拟目录. 调整你的环境. #这段翻译不好,简单的说就是设置下apache的虚拟路径和主路径,apache相关设置资料中文一大堆

在设置apache之前, 我们先创建一个django项目(e.g. called mysite) (see http://www.djangoproject.com/documentation/tutorial01/). 出去安全考虑,我新建的项目不安装到apache更根目录下去 /var/www (e.g. in /home/mycode):

mkdir /home/mycode #新建一个目录
cd /home/mycode #打开刚才创建的目录
/usr/share/python-support/python-django/django/bin/django-admin.py startproject mysite #在打开的目录下创建一个django项目

这里会创建一个目录 /home/mycode/mysite with 一些python文件在里面

现在,mysite这个项目我们已经创建好了, 我们继续设置apache. 我设置我的虚拟目录,在/etc/apache2/sites-available/default<VirtualHost … >…</VirtualHost> 标签之间设置vi /etc/apache2/sites-available/default

[...]<Location "/mysite">    SetHandler python-program    PythonHandler django.core.handlers.modpython    SetEnv DJANGO_SETTINGS_MODULE mysite.settings    PythonDebug On    PythonPath "['/home/mycode'] + sys.path"</Location>[...]

重启apache

/etc/init.d/apache2 restart

我们可以看到打开的效果如下:

5 在django项目里设置mysql的链接

#不翻译这段废话了,看下面的就知道了

vi /home/mycode/mysite/settings.py

[...]DATABASE_ENGINE = 'mysql'           # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'ado_mssql'.DATABASE_NAME = 'mysite'             # Or path to database file if using sqlite3.DATABASE_USER = 'mysiteadmin'             # Not used with sqlite3.DATABASE_PASSWORD = 'mysiteadmin_password'         # Not used with sqlite3.DATABASE_HOST = ''             # Set to empty string for localhost. Not used with sqlite3.DATABASE_PORT = ''             # Set to empty string for default. Not used with sqlite3.[...]

原文讲的很清晰,可以我配置起来还是有点问题,第一次成功,后面就一直失败,莫名其妙~~

目前我还未解决一下问题,望高手指教:

1、mysql对外开发链接,不能成功,期待解决方案

2、mysql中文问题,即使我都设置了utf8 还是有乱码现象

3、暂时未发现,但一定还有问题

本人无论E文还是python水平都有限,望大家见谅。算是为python&django在中国推广做点贡献!

如何在python中使用*args,**kwargs (How to use *args and **kwargs in Python)

原文出自:How to use *args and **kwargs in Python

作者:Sofeng

一次公司的交流会上,讨论了这个问题,为加深映像和锻炼英语,将原文翻译了下!

如何在python中使用可变长度的参数.

这个特殊的语法, *args and **kwargs 在一个方法中,是为了传递多个可变的参数。单个星号的形式(*args)是为了传递一个可变长度的list数据,而双星的形式(**kwargs) 是为了传递多个可变的字典数据。这里有个例子讲了如何使用这些参数. 这个例子,传递一个确定的参数,和多个可变长度的参数:

def test_var_args(farg, *args):
print “formal arg:”, farg
for arg in args:
print “another arg:”, arg

test_var_args(1, “two”, 3)

结果:

formal arg: 1another arg: twoanother arg: 3

这个例子是讲如何传递一个可变字典, 一个确定参数和多个可变字典参数

def test_var_kwargs(farg, **kwargs):
print “formal arg:”, farg
for key in kwargs:
print “another keyword arg: %s: %s % (key, kwargs[key])

test_var_kwargs(farg=1, myarg2=“two”, myarg3=3)

结果:

formal arg: 1another keyword arg: myarg2: twoanother keyword arg: myarg3: 3

在方法里使用 *args**kwargs

def test_var_args_call(arg1, arg2, arg3):    print "arg1:", arg1    print "arg2:", arg2    print "arg3:", arg3args = (1, "two", 3)test_var_args_call(*args)

结果:

arg1: 1arg2: twoarg3: 3

这个例子是讲如何在方法里调用字典:

def test_var_args_call(arg1, arg2, arg3):    print "arg1:", arg1    print "arg2:", arg2    print "arg3:", arg3kwargs = {"arg3": 3, "arg2": "two", "arg1": 1}test_var_args_call(**kwargs)

Results:

arg1: 1arg2: twoarg3: 3

当然, 这些语法可以同时在python里面使用,但是我(作者)不建议这么做.

详见:Section 5.3.4 in the Python Reference Manual

参考:Core Python Programming, Second Edition, Section 11.6

自己的总结:

*args 传递多个普通参数

**kwargs 传递多个字典参数