Python Web编程(六)

通过以上的学习,应该基本掌握了Django的运行机制,页面表示,URL匹配,下面即将进入数据库的操作。

我用的是MySql,在Python中的MySql库可以在http://sourceforge.net/projects/mysql-python找到。

首先需要做的就是在settings.py中配置数据库。

DATABASE_ENGINE = 'mysql'           # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'ado_mssql'.
DATABASE_NAME = 'pythontest'             # Or path to database file if using sqlite3.
DATABASE_USER = 'root'             # Not used with sqlite3.
DATABASE_PASSWORD = '319958'         # 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.

 

然后在我们的test1工程下面新建一个App,命令如下:

python manage.py startapp books

它创建了一个文件夹/books,下面有三个文件,

__init__.py,models.py,views.py。

呵呵,从名字也可以看出来,MVC。

一般的来说,Model层是跟数据库紧密结合的,并基本保持一致的。

View层就是模板了,也就是表示层,它将输出页面。

Control层就是业务层了,你的逻辑如果没有特殊情况应该放到这里面。

不说废话了,在models.py里面写代码吧。

from django.db import models

class Publisher(models.Model):
    name = models.CharField(maxlength=30)
    address = models.CharField(maxlength=50)
    city = models.CharField(maxlength=60)
    state_province = models.CharField(maxlength=30)
    country = models.CharField(maxlength=50)
    website = models.URLField()

class Author(models.Model):
    salutation = models.CharField(maxlength=10)
    first_name = models.CharField(maxlength=30)
    last_name = models.CharField(maxlength=40)
    email = models.EmailField()
    headshot = models.ImageField(upload_to='/tmp')

class Book(models.Model):
    title = models.CharField(maxlength=100)
    authors = models.ManyToManyField(Author)
    publisher = models.ForeignKey(Publisher)
    publication_date = models.DateField()

接下来需要激活和安装模型,在settings.py中找到INSTALLED_APPS,

然后将其内容修改如下:

INSTALLED_APPS = (
    #'django.contrib.auth',
    #'django.contrib.contenttypes',
    #'django.contrib.sessions',
    #'django.contrib.sites',
    'test1.books',
)

最后,用下面命令验证一下整个Project中是否存在模型错误:

python manage.py validate

很不幸,出现一个错误,由于我们在class Author中用到了图像处理,需要下在另外的库:

http://www.pythonware.com/products/pil/

下载回来安装之后,在运行验证命令,就会发现已经不存在错误了。

在模型验证正确之后,就可以执行下面语句生成建表的SQL语句了:

python manage.py sqlall books

生成的结果如下:

BEGIN;
CREATE TABLE `books_publisher` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `name` varchar(30) NOT NULL,
    `address` varchar(50) NOT NULL,
    `city` varchar(60) NOT NULL,
    `state_province` varchar(30) NOT NULL,
    `country` varchar(50) NOT NULL,
    `website` varchar(200) NOT NULL
);
CREATE TABLE `books_book` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `title` varchar(100) NOT NULL,
    `publisher_id` integer NOT NULL REFERENCES `books_publisher` (`id`),
    `publication_date` date NOT NULL
);
CREATE TABLE `books_author` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `salutation` varchar(10) NOT NULL,
    `first_name` varchar(30) NOT NULL,
    `last_name` varchar(40) NOT NULL,
    `email` varchar(75) NOT NULL,
    `headshot` varchar(100) NOT NULL
);
CREATE TABLE `books_book_authors` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `book_id` integer NOT NULL REFERENCES `books_book` (`id`),
    `author_id` integer NOT NULL REFERENCES `books_author` (`id`),
    UNIQUE (`book_id`, `author_id`)
);
CREATE INDEX books_book_publisher_id ON `books_book` (`publisher_id`);
COMMIT;

在MySql中执行一下上述语句,生成了四个表。

可以看出,Django的功能是很强大的。

当然,上面的命令只是生成SQL语句,Django提供了更快捷的方法,可以直接在数据库中建表:

python manage.py syncdb。

是不是有点儿心急,还没有讲到数据库操作呢。

先来试用一下吧。

运行python manage.py shell,然后输入以下代码:

from books.models import Publisher

p = Publisher(name='Apress', address='2560 Ninth St.',
        city='Berkeley', state_province='CA', country='U.S.A.',
        website='http://www.apress.com/')

p.save()

现在看一下数据库,是不是books_publisher有了一条数据?

posted on 2007-09-12 21:38  Game_over  阅读(4268)  评论(4编辑  收藏  举报