django-model(模型)
1.model的由来
1.引子
对现代的 Web 应用程序而言,视图逻辑经常需要与数据库交互。在数据库驱动型网站中,网站连接数据库服
务器,从中检索数据,然后在网页中把数据显示出来。此外,可能还会提供让访客自行填充数据库的方式。
很多复杂的网站都兼具这两种操作。亚马逊网站就是数据库驱动型网站,每个商品页面其实都会查询亚马逊
的商品数据库,然后把数据以 HTML 格式显示出来;顾客发表评论时,把评论插入相应的数据库表中。
Django 非常适合构建数据库驱动型网站,它提供了简单而强大的工具,易于使用 Python 执行数据库查询。
节就说明这个功能,即 Django 的数据库层。
2.在视图函数中通过引入数据库的接口模块来查询(不建议这么做)
在视图中生成输出的“愚蠢”方式(直接在视图中硬编码文本),同样,在视图中从数据库里检
索数据也有“愚蠢”方式。这种方式很简单:使用现有的 Python 库执行 SQL 查询,然后处理结果。在下面这
个示例中,我们使用 MySQLdb 库连接一个 MySQL 数据库,检索一些记录,提供给模板,在网页中显示:
from django.shortcuts import render 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(request, 'book_list.html', {'names': names})
这么做是可以,但是很快就会出现一些问题:
• 数据库连接参数是硬编码的。理想的做法是,把这些参数存储在 Django 配置中。
• 要编写相当多的样板代码:建立连接、创建游标、执行语句、关闭连接。理想情况下,我们只应该指
定想要什么结果。
• 与 MySQL 耦合。如果以后想从 MySQL 转到 PostgreSQL,要重新编写大量代码。理想情况下,数据
库服务器应该有一层抽象,这样在一处修改就能更换。(如果构建的是开源 Django 应用程序,希望有
更多的人使用,这个特性尤其有用。)
正如你期待的那样,Django 的数据库层解决了这些问题。
3.配置数据库
了解基本原理之后,下面来讨论 Django 的数据库层。首先,看一下创建应用程序时在 settings.py 文件中添
加的初始配置:
# Database # ... DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } }
默认的设置非常简单,下面说明各个设置:
• ENGINE 告诉 Django 使用哪个数据库引擎。本书的示例使用 SQLite,因此不用改,继续使用默认的
django.db.backends.sqlite3。
• NAME 告诉 Django 数据库的名称。例如:'NAME': 'mydb',。
因为我们使用的是 SQLite,startproject 命令为我们填上了数据库文件的完整文件系统路径。
这是默认设置,对这本书中的代码来说,无需修改。这里讲解这些设置,是为了让你了解在 Django 中配置数
据库是多么简单。

浙公网安备 33010602011771号