lx86 发表于 2016-11-22 08:55:02

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 = 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的初学者,写这一系列教程的目的就是为了加深自己的理解,希望大家多多包涵和指教,有什么问题请留言,谢谢。
页: [1]
查看完整版本: Django系列教程:六、模型(一)