注明: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. } }
下面就是验证一下是否配置成功,看我图片中的操作即可。
如果最后没出现错误则表示配置成功。要不然就会出现错误信息,常见的有下面几种。
错误信息 | 解决方法 |
---|---|
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的初学者,写这一系列教程的目的就是为了加深自己的理解,希望大家多多包涵和指教,有什么问题请留言,谢谢。