上一回说到,姜戈的江湖初体验:如何架设服务器,如何回复http请求,如何创建App。这一回,我们要走入糖果庄园。
数据库是一所大庄园,藏着各种宝贝。一个没有数据库的网站,所能提供的功能会非常有限。

为了找到心爱的人,姜戈决定一探这神秘的糖果庄园。
连接数据库
Django为多种数据库后台提供了统一的调用API。根据需求不同,Django可以选择不同的数据库后台。MySQL算是最常用的数据库。我们这里将Django和MySQL连接。
在Linux终端下启动mysql:
$mysql -u root -p
在MySQL中创立Django项目的数据库:
mysql> CREATE DATABASE villa DEFAULT CHARSET=utf8;
这里使用utf8作为默认字符集,以便支持中文。
在MySQL中为Django项目创立用户,并授予相关权限:
mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES ON villa.* TO 'vamei'@'localhost' IDENTIFIED BY 'vameiisgood';
在settings.py中,将DATABASES对象更改为:

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'villa',
'USER': 'vamei',
'PASSWORD': 'vameiisgood',
'HOST':'localhost',
'PORT':'3306',
}
}

后台类型为mysql。上面包含数据库名称和用户的信息,它们与MySQL中对应数据库和用户的设置相同。Django根据这一设置,与MySQL中相应的数据库和用户连接起来。此后,Django就可以在数据库中读写了。
姜戈略一迟疑,旋即走入了庄园的大门。
创立模型
MySQL是关系型数据库。但在Django的帮助下,我们不用直接编写SQL语句。Django将关系型的表(table)转换成为一个类(class)。而每个记录(record)是该类下的一个对象(object)。我们可以使用基于对象的方法,来操纵关系型的MySQL数据库。
在传统的MySQL中,数据模型是表。在Django下,一个表为一个类。表的每一列是该类的一个属性。在models.py中,我们创建一个只有一列的表,即只有一个属性的类:
from django.db import models
class Character(models.Model):
name = models.CharField(max_length=200)
def __unicode__(self):
return self.name
类Character定义了数据模型,它需要继承自models.Model。在MySQL中,这个类实际上是一个表。表只有一列,为name。可以看到,name属性是字符类型,最大长度为200。
类Character有一个__unicode__()方法,用来说明对象的字符表达方式。如果是Python 3,定义__str__()方法,实现相同的功能。
命令Django同步数据库。Django根据models.py中描述的数据模型,在MySQL中真正的创建各个关系表:
$python manage.py syncdb