Django系列教程:六、模型(一)

注明:python版本为3.3.1、Django版本为1.5.1,操作系统为Windows7,其他版本有一些不同的地方读者可以自行探讨。

因为本章篇幅略长,所以分作两节来讲,这一节将讲解下数据库的安装,和模型的配置,下一节则是讲解一下Django里面如何对数据库进行各种操作。

一些知识:

A:什么是模型?

如果熟悉MVC的朋友应该知道M其实就是模型Model的意思,即数据存取层,该层处理与数据相关的所有事务: 如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。简单点就是操作数据库的一个体系。

B:为什么要用模型?

因为在Python中要操作数据库则需要数据库驱动,这些驱动有内置的(sqlite3)也有需要安装的(mysql、postgre)等,只有安装了这些数据库的驱动,python才能对他们进行操作,如下面的代码就是使用mysqldb数据库驱动的一个例子。

from django.shortcuts import render_to_response
import MySQLdb

def book_list(request):
    db = MySQLdb.connect(user='me', db='mydb', passwd='secret', host='localhost')
    cursor = db.cursor()
    cursor.execute('SELECT name FROM books ORDER BY name')
    names = [row[0] for row in cursor.fetchall()]
    db.close()
    return render_to_response('book_list.html', {'names': names})

从上面的例子(源自Django Book2)我们可以看到它直接将sql语句硬编码到了html中,而理想的情况应该是将这些参数都保存在Django中。另外,如果以后换作其他的数据库,则又不得不从新修改,实在是麻烦至极,而模型正好可以解决这个问题,下面我们就来讲将模型是怎样来解决这个问题的。

1、数据库的安装和Python数据库驱动的安装(这里为了配合大多数教材,所以以postgreSQL为例,其实万法同归。)

下载postgreSQL安装,地址:http://www.postgresql.org/download/ 选择合适的版本,windows安装时按照步骤来就行,没有太多的配置,只是设置的密码要记住了。比如我的密码设置为:911027 (如果还不行,请百度之,这里不浪费时间了)

安装好以后再下载它的数据库驱动,其地址为:http://www.djangoproject.com/r/python-pgsql/ windows安装时会自动定位到你的python目录,一步即可安装到位,无须任何配置。

2、配置和验证数据库

打开你的settings.py文件,具体修改后代码如下:

DATABASES = {
    'default': {   #默认代码如下这时候看我操作
         'ENGINE': 'django.db.backends.postgresql_psycopg2', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
         'NAME': 'postgres',#默认有一个数据库                      # Or path to database file if using sqlite3.
         # The following settings are not used with sqlite3:
         'USER': 'postgres',#默认用户名
         'PASSWORD': '911027',
         'HOST': '',                      # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP.
         'PORT': '',        #上面两项都留空              # Set to empty string for default.
    }
}

 下面就是验证一下是否配置成功,看我图片中的操作即可。

如果最后没出现错误则表示配置成功。要不然就会出现错误信息,常见的有下面几种。

表 5-2. 数据库配置错误信息
错误信息解决方法
You haven’t set the DATABASE_ENGINE setting yet. 不要以空字符串配置`` DATABASE_ENGINE`` 的值。 表格 5-1 列出可用的值。
Environment variable DJANGO_SETTINGS_MODULE is undefined. 使用`` python manager.py shell`` 命令启动交互解释器,不要以`` python`` 命令直接启动交互解释器。
Error loading _____ module: No module named _____. 未安装合适的数据库适配器 (例如, psycopg  MySQLdb )。Django并不自带适配器,所以你得自己下载安装。
_____ isn’t an available database backend. DATABASE_ENGINE 配置成前面提到的合法的数据库引擎。 也许是拼写错误?
database _____ does not exist 设置`` DATABASE_NAME`` 指向存在的数据库,或者先在数据库客户端中执行合适的`` CREATE DATABASE`` 语句创建数据库。
role _____ does not exist 设置`` DATABASE_USER`` 指向存在的用户,或者先在数据库客户端中执创建用户。
could not connect to server 查看DATABASE_HOST和DATABASE_PORT是否已正确配置,并确认数据库服务器是否已正常运行。

 3、创建一个应用程序

 这里说的应用程序其实是一个App,使用下面的代码即可创建。

python manage.py startapp books

以上代码便创建了一个名叫books的App,那么它和Project是什么关系呢?其实关系很简单,你只要将project当作整个网站主体,其中有买书的、有卖鱼的,有相亲的,这些每一样都可以建立一个App,换句话说App其实就是project的功能,这样理解应该不算错。
好了,创建好这个app以后,下面就是把这个app关联到这个工程中去,比如我这里的工程是testtemplate,我们找到settings.py文件,找到INSTALLED_APPS将其代它代码注释掉,再添加books即可:

INSTALLED_APPS = (
    #'django.contrib.auth',
    #'django.contrib.contenttypes',
    #'django.contrib.sessions',
    #'django.contrib.sites',
    #'django.contrib.messages',
    #'django.contrib.staticfiles',
    'books',
    # Uncomment the next line to enable the admin:
    # 'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
)

另外还要将下面MIDDLEWARE_CLASSES的代码修改为如此:

MIDDLEWARE_CLASSES = (
    #'django.middleware.common.CommonMiddleware',
    #'django.contrib.sessions.middleware.SessionMiddleware',
    #'django.middleware.csrf.CsrfViewMiddleware',
    #'django.contrib.auth.middleware.AuthenticationMiddleware',
    #'django.contrib.messages.middleware.MessageMiddleware',

    # Uncomment the next line for simple clickjacking protection:
    # 'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

其实就是将括号里面的给注释掉,因为你使用了books这个App,其他的并没有用到,如果还要调用的话反而会出错。

好了,代码的配置暂时到这里结束了。下面看看你的文档结构如下:

-------------------------------------------------------------------
│  manage.py

├─books
│  │  models.py
│  │  tests.py
│  │  views.py
│  │  __init__.py
│  │
│  └─__pycache__
│          models.cpython-33.pyc
│          __init__.cpython-33.pyc

└─testtemplate
    │  handle.py
    │  settings.py
    │  urls.py
    │  wsgi.py
    │  __init__.py
    │
    ├─template
    │      template.html
    │
    └─__pycache__
            handle.cpython-33.pyc
            handles.cpython-33.pyc
            settings.cpython-33.pyc
            urls.cpython-33.pyc
            view.cpython-33.pyc
            wsgi.cpython-33.pyc
            __init__.cpython-33.pyc

--------------------------------------------------------------

可以打开books文件夹下面的models.py和views.py文件看看,除了models.py中有一行代码,其余皆为空白。本章就暂时到这里,下一章我们将通过一个简单的例子来说明模型中django数据库如何进行查询创建,修改排序增减删除等操作。

本人既是python的初学者也是Django的初学者,写这一系列教程的目的就是为了加深自己的理解,希望大家多多包涵和指教,有什么问题请留言,谢谢。

posted @ 2013-05-21 12:23  倾杯天涯  阅读(1689)  评论(2编辑  收藏  举报