zoukankan      html  css  js  c++  java
  • 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的初学者,写这一系列教程的目的就是为了加深自己的理解,希望大家多多包涵和指教,有什么问题请留言,谢谢。

    鹜落霜洲,雁横烟渚,分明画出秋色。暮雨乍歇,小楫夜泊,宿苇村山驿。何人月下临风处,起一声羌笛。离愁万绪,闲岸草、切切蛩吟似织。 为忆芳容别后,水遥山远,何计凭鳞翼。想绣阁深沉,争知憔悴损,天涯行客。楚峡云归,高阳人散,寂寞狂踪迹。望京国。空目断、远峰凝碧。
  • 相关阅读:
    4-1 zookeeper常用命令行操作
    3 zookeeper 基本数据模型
    2 ZooKeep安装
    1 zookeeper的特性
    js数据类型
    javascript中的严格模式
    2 Vue中组件开发
    1 Vue的基础语法
    责任链设计模式
    四中网络专线接入方式
  • 原文地址:https://www.cnblogs.com/thunderest/p/3090420.html
Copyright © 2011-2022 走看看