没有合适的资源?快使用搜索试试~ 我知道了~
首页Django 1.8入门教程:全面掌握模型、视图与文件上传
Django 1.8入门教程:全面掌握模型、视图与文件上传
需积分: 9 5 下载量 78 浏览量
更新于2024-07-19
收藏 10.53MB PDF 举报
本资源是一份详细的Django 1.8教程,适合初学者和有一定经验的开发者深入学习。教程涵盖了Django的基础入门到高级特性的全面指导。以下是部分内容概要: 1. 入门阶段: - 从零开始:教程分为六个主要部分,包括安装和设置(100%),让你快速熟悉环境。这部分涵盖了创建项目、安装依赖和配置基础结构。 2. 模型层: - Django的Model API是核心,提供了模型语法、字段类型(如CharField、IntegerField等)、元选项以及模型类的创建。此外,还有模型查询集的操作、迁移工具的使用和高级特性,如数据库功能、自定义查询等。 3. 视图层: - 视图是Django处理用户请求的核心组件。包括URL配置、基本视图函数、装饰器、内置视图和文件上传的处理。还介绍了基于类的视图,如显示和编辑视图,以及如何利用Mixins和API进行扩展。 4. 高级教程: - 进一步探讨如何编写可重用的应用、为Django开发第一个补丁、以及高级主题如数据库管理、事务处理、性能优化、PostgreSQL特定功能等。 5. 其他重要知识点: - 支持的数据库类型、遗留数据库兼容性、数据初始化、模板系统以及与Request和Response对象的交互。 这份教程不仅适合新手上手,也适合进阶开发者提升Django技能。通过一步步的学习,读者可以构建出高效、安全的web应用,并了解Django框架的最佳实践。无论是为了个人项目还是职业发展,这份资源都是宝贵的学习资料。
资源详情
资源推荐
开发服务器会根据需要自动重新载入 Python 代码。 你不必为了使更改的代码生效而重启服务
器。 然而,一些行为比如添加文件,不会触发服务器的重启,所以在这种情况下你需要手动
重启服务器。
创建模型
现在,你的开发环境 —— 一个“项目” —— 已经建立起来,你将开始在上面做一些东西。
你编写的每个 Django 应用都是遵循特定约定且包含一个 Python 包。 Django 自带一个工具,
它可以自动生成应用的基本目录结构,这样你就能专心于书写代码而不是创建目录。
项目 vs. 应用
项目和应用之间有什么不同? 应用是一个 Web 应用程序,它完成具体的事项 —— 比如一个
博客系统、一个存储公共档案的数据库或者一个简单的投票应用。 项目是一个特定网站中相
关配置和应用的集合。一个项目可以包含多个应用。一个应用可以运用到多个项目中。
你的应用可以放在 Python path 上的任何位置。在本教程中,我们将在你的 manage.py 文件同
级目录创建我们的投票应用,以便可以将它作为顶层模块导入,而不是 mysite 的子模块。
确保你在与 manage.py 相同的目录下,并且键入以下命令来创建你的应用:
$ python manage.py startapp polls
这将创建一个目录 polls,它的结构如下:
polls/
__init__.py
admin.py
migrations/
__init__.py
models.py
tests.py
views.py
我们的投票应用将基于这个目录结构。
当编写一个数据库驱动的 Web 应用时,第一步就是定义该应用的模型 —— 本质上,就是定义
该模型所对应的数据库设计及其附带的元数据。
理念
模型指出了数据的唯一、明确的真实来源。 它包含了正在存储的数据的基本字段和行
为。 Django 遵循 DRY (Don't repeat yourself)原则。这个原则的目标是在一个地方定义你
的数据模型,并从它自动获得需要的信息。
迁移工具也符合以上哲学 —— 这不同于 Ruby On Rails 中的迁移;例如,迁移完全依照于你
的模型文件且本质上只是一个历史记录,Django 通过这个历史记录更新你的数据库模式使它与
你现在的模型文件保持一致。
在这个简单的投票应用中,我们将创建两个模型: Question 和 Choice。Question 对象具有一
个 question_text(问题)属性和一个 publish_date(发布时间)属性。 Choice 有两个字
段:选择的内容和选择的得票统计。 每个 Choice 与一个 Question 关联。
这些概念通过简单的 Python 类来表示。 编辑 polls/models.py 文件,并让它看起来像这样:
polls/models.py
from django.db import models
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
class Choice(models.Model):
question = models.ForeignKey(Question)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
上述代码非常直观。每个模型都用一个类表示,该类继承自 django.db.models.Model。每个模
型有多个类的属性变量,而每一个类的属性变量又都代表了数据库表中的一个字段。
每个字段通过 Field 类的一个实例表示 —— 例如字符字段 CharField 和日期字段
DateTimeField。这种方法告诉 Django,每个字段中保存着什么类型的数据。
每个 Field 实例的名字(例如 question_text 或 pub_date)就是字段的名字,并且是机器
可读的格式。你将在 Python 代码中使用到它的值,并且你的数据库将把它用作表的列名。
你可以使用 Field 的第一个参数来指定一个人类可读的名字,这是可选的。它在 Django 的内省
机制中有使用,而且可以兼作文档。 如果没有提供这个参数,Django 将使用那个机器可读的
名字(实例名)。 在这个例子中,我们只为 Question.pub_date 定义一个人类可读的名
字。 对于这个模型中其他的字段,机器可读的名字(实例名)足以充分地表达出它的含义。
某些 Field 类具有必选的参数。例如,CharField 要求你给它一个 max_length。这个参数不仅
用于数据库模式,而且数据验证中也会用到,我们稍后会看到。
Field 还具有各种可选参数。在这个例子中,我们设置 votes 字段的默认值 为 0。
最后,注意我们使用 ForeignKey 定义了一个关联。它告诉 Django 每个 Choice 都只关联一个
Question。Django 支持所有常见的数据库关联:多对一、多对多和一对一。
激活模型
上面那段简短的模型代码给了 Django 很多信息。 有了这些代码,Django 就能够:
1. 为该应用创建数据库表(CREATE TABLE 语句)。
2. 为 Question 对象和 Choice 对象创建一个访问数据库的 python API。
但是,我们首先得告诉项目:polls 应用已经安装。
理念
Django 应用是可以“热插拔”的,即可以在多个项目中使用同一个应用,也可以分发这些应
用, 因为它们不需要与某个特定的 Django 安装绑定。
再次编辑 mysite/settings.py 文件,并修改 INSTALLED_APPS 设置以包含字符串'polls'。所以
它现在是这样的:
mysite/settings.py
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'polls',)
现在 Django 知道要包含 polls 应用。 让我们运行另外一个命令:
$ python manage.py makemigrations polls
你应该看到类似下面的内容:
Migrations for 'polls':
0001_initial.py:
- Create model Question
- Create model Choice
- Add field question to choice
通过运行 makemigrations 告诉 Django,已经对模型做了一些更改(在这个例子中,你创建了一
个新的模型)并且会将这些更改存储为迁移文件。
Django 使用迁移文件来保存对模型的更改(即数据库模式的更改)—— 所谓迁移文件其实就是
磁盘上的普通文件。 如果愿意,你可以阅读迁移文件来了解新模型; 这个迁移文件就
是 polls/migrations/0001_initial.py。不用担心,Django 不要求你在每次 Django 生成迁
移文件之后都要阅读这些文件,但是它们被设计成可人为编辑的形式,以便你可以手工稍微修
改一下 Django 的某些具体行为。
有一个命令可以运行这些迁移文件并自动管理你的数据库模式 —— 它叫做 migrate,我们一会
儿会用到它 —— 但是首先,让我们看一下迁移行为将会执行哪些 SQL 语句。sqlmigrate 命令
接收迁移文件的名字并返回它们的 SQL 语句:
$ python manage.py sqlmigrate polls 0001
你应该会看到类似如下的内容(为了便于阅读我们对它重新编排了格式):
BEGIN;CREATE TABLE "polls_choice" (
"id" serial NOT NULL PRIMARY KEY,
"choice_text" varchar(200) NOT NULL,
"votes" integer NOT NULL);CREATE TABLE "polls_question" (
"id" serial NOT NULL PRIMARY KEY,
"question_text" varchar(200) NOT NULL,
"pub_date" timestamp with time zone NOT NULL);ALTER TABLE "polls_choice" ADD
COLUMN "question_id" integer NOT NULL;ALTER TABLE "polls_choice" ALTER COLUMN
"question_id" DROP DEFAULT;CREATE INDEX "polls_choice_7aa0f6ee" ON "polls_choice"
("question_id");ALTER TABLE "polls_choice"
ADD CONSTRAINT "polls_choice_question_id_246c99a640fbbd72_fk_polls_question_id"
FOREIGN KEY ("question_id")
REFERENCES "polls_question" ("id")
DEFERRABLE INITIALLY DEFERRED;
COMMIT;
请注意以下几点:
1. 输出的具体内容会依据你使用的数据库而不同。 以上例子使用的数据库是 PostgreSQL。
2. 表名是自动生成的,由 app 的名字(polls)和模型名字的小写字母组合而成——question
和 choice。(你可以重写这个行为。)
3. 主键(IDs)是自动添加的。 (你也可以重写这个行为。)
4. 按照惯例,Django 会在外键的字段名后面添加 "_id"。(是的,你依然可以重写这个行
为。)
5. 外键关系由 FOREIGN KEY 约束显式声明。不用在意 DEFERRABLE 部分;它只是告诉
PostgreSQL 直到事务的最后再执行外键关联。
6. 这些 SQL 语句是针对你所使用的数据库定制的,所以会为你自动处理某些数据库所特有的字
段例如 auto_increment(MySQL)、 serial (PostgreSQL)或
integer primary key autoincrement (SQLite) 。在处理字段名的引号时也是如此 —
— 例如,使用双引号还是单引号。
7. sqlmigrate 命令并不会在你的数据库上真正运行迁移文件 —— 它只是把 Django 认为需要
的 SQL 打印在屏幕上以让你能够看到。 这对于检查 Django 将要进行的数据库操作或者你的
数据库管理员需要这些 SQL 脚本是非常有用的。
如果有兴趣,你还可以运行 python manage.py check;它会检查你的项目中的模型是否存在
问题,而不用执行迁移或者接触数据库。
现在,再次运行 migrate 以在你的数据库中创建模型所对应的表:
$ python manage.py migrateOperations to perform: Synchronize unmigrated apps:
staticfiles, messages Apply all migrations: admin, contenttypes, polls, auth,
sessionsSynchronizing apps without migrations: Creating tables... Running
deferred SQL... Installing custom SQL...Running migrations: Rendering model
states... DONE Applying <migration name>... OK
migrate 命令会找出所有还没有被应用的迁移文件(Django 使用数据库中一个叫做
django_migrations 的特殊表来追踪哪些迁移文件已经被应用过),并且在你的数据库上运行它
们 —— 本质上来讲,就是使你的数据库模式和你改动后的模型进行同步。
迁移功能非常强大,可以让你在开发过程中不断修改你的模型而不用删除数据库或者表然后再
重新生成一个新的 —— 它专注于升级你的数据库且不丢失数据。 我们将在本教程的后续章
节对迁移进行深入地讲解,但是现在,请记住实现模型变更的三个步骤:
1. 修改你的模型(在 models.py 文件中)。
2. 运行 python manage.py makemigrations ,为这些修改创建迁移文件
3. 运行 python manage.py migrate ,将这些改变更新到数据库中。
将生成和应用迁移文件的命令分成几个命令来执行,是因为你可能需要将迁移文件提交到你的
版本控制系统中并跟随你的应用一起变化; 这样做不仅可以使开发变得更加简单,而且对其
他开发者以及上线生产非常有用。
阅读 django-admin 的文档来了解 manage.py 工具能做的所有事情。
玩转 API
现在,让我们进入 Python 的交互式 shell,玩转这些 Django 提供给你的 API。 使用如下命令
来调用 Python shell:
$ python manage.py shell
我们使用上述命令而不是简单地键入“python”进入 python 环境,是因为 manage.py 设置了
DJANGO_SETTINGS_MODULE 环境变量,该变环境变量告诉 Django 导入 mysite/settings.py 文
件的路径。
绕开 manage.py
如果你不想使用 manage.py,也没问题。只要设置 DJANGO_SETTINGS_MODULE 环境变量
为 mysite.settings,启动一个普通的 Python shell,然后建立 Django:
>>> import django>>> django.setup()
如果以上命令引发了一个 AttributeError,可能是你使用了一个和本教程不匹配的 Django 版
本。 你可能需要换一个老一点的教程或者换一个新一点的 Django 版本。
你必须在与 manage.py 相同的目录下运行 python,或确保你的目录在 Python 的路径中,这样
import mysite 才可以工作。
所有这些信息,请参见 django-admin 的文档。
一旦你进入这个 shell,请探索这些数据库 API:
>>> from polls.models import Question, Choice
# Import the model classes we
just wrote.
剩余913页未读,继续阅读
gitvtv
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Lombok 快速入门与注解详解
- SpringSecurity实战:声明式安全控制框架解析
- XML基础教程:从数据传输到存储解析
- Matlab实现图像空间平移与镜像变换示例
- Python流程控制与运算符详解
- Python基础:类型转换与循环语句
- 辰科CD-6024-4控制器说明书:LED亮度调节与触发功能解析
- AE particular插件全面解析:英汉对照与关键参数
- Shell脚本实践:创建tar包、字符串累加与简易运算器
- TMS320F28335:浮点处理器与ADC详解
- 互联网基础与结构解析:从ARPANET到多层次ISP
- Redhat系统中构建与Windows共享的Samba服务器实战
- microPython编程指南:从入门到实践
- 数据结构实验:顺序构建并遍历链表
- NVIDIA TX2系统安装与恢复指南
- C语言实现贪吃蛇游戏基础代码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功