Django基本介绍
1. Django框架的介绍
1.诞生
Django是一个开放源代码的Web应用框架,由Python写成。采用了MVT的软件设计模式,即模型Model,视图View和模板Template。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的。并于2005年7月在BSD许可证下发布。这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的。
Django的主要目标是使得开发复杂的、数据库驱动的网站变得简单。Django注重组件的重用性和“可插拔性”,敏捷开发和DRY法则(Don't Repeat Yourself)。在Django中Python被普遍使用,甚至包括配置文件和数据模型。
2.组件
Django框架的核心包括:一个面向对象的映射器,用作数据模型(以Python类的形式定义)和关系性数据库间的媒介;一个基于正则表达式的URL分发器;一个视图系统,用于处理请求;以及一个模板系统。
核心框架中还包括:
一个轻量级的、独立的Web服务器,用于开发和测试。
一个表单序列化及验证系统,用于HTML表单和适于数据库存储的数据之间的转换。
一个缓存框架,并有几种缓存方式可供选择。
中间件支持,允许对请求处理的各个阶段进行干涉。
内置的分发系统允许应用程序中的组件采用预定义的信号进行相互间的通信。
一个序列化系统,能够生成或读取采用XML或JSON表示的Django模型实例。
一个用于扩展模板引擎的能力的系统。
3.内置应用
Django 包含了很多应用在它的"contrib"包中,这些包括:
一个可扩展的认证系统
动态站点管理页面
一组产生RSS和Atom的工具
一个灵活的评论系统
产生Google站点地图(Google Sitemaps)的工具
防止跨站请求伪造(cross-site request forgery)的工具
一套支持轻量级标记语言(Textile和Markdown)的模板库
一套协助创建地理信息系统(GIS)的基础框架
注意文件顶部的 INSTALLED_APPS 设
置,其值是这个 Django 实例中激活的全部 Django 应用。一个应用可以在多个项目中使用,而且应用可以打
包,供其他项目使用。默认情况下,INSTALLED_APPS 包含下述应用,这些都是 Django 自带的:
• django.contrib.admin:管理后台
• django.contrib.auth:身份验证系统
• django.contrib.contenttypes:内容类型框架
• django.contrib.sessions:会话框架
• django.contrib.messages:消息框架
• django.contrib.staticfiles:管理静态文件的框架
Django 项目默认包含这些应用,这是为常见场景所做的约定。其中某些应用要使用数据库表,因此使用之前
要在数据库中创建所需的表。为此,运行下述命令:
python manage.py migrate
migrate 命令查看 INSTALLED_APPS 设置,根据 settings.py 文件中的数据库设置,以及应用自带的数据库迁移
(后文说明)创建所需的数据库表。每执行一个迁移都会看到一个消息。
2. Django的MTV模型
1.模型-视图-控制器设计模式
MVC 这个概念存在很长时间了,但是随着互联网的发展才被更多的人熟知,因为它是设计客户端-服务器应
用的最佳方式。所有最好的 Web 框架都围绕 MVC 概念构建。虽然可能引起激烈的争论,但我还是要说,不
使用 MVC 设计 Web 应用是错误的做法。就概念层次而言,MVC 设计模式非常容易理解:
• 模型(M)是数据的表述。它不是真正的数据,而是数据的接口。使用模型从数据库中获取数据时,
无需知道底层数据库错综复杂的知识。模型通常还会为数据库提供一层抽象,这样同一个模型就能使
用不同的数据库。
• 视图(V)是你看到的界面。它是模型的表现层。在电脑中,视图是你在浏览器中看到的 Web 应用的
页面,或者是桌面应用的 UI。视图还提供了收集用户输入的接口。
• 控制器(C)控制模型和视图之间的信息流动。它通过程序逻辑判断通过模型从数据库中获取什么信
息,以及把什么信息传给视图。它还通过视图从用户那里收集信息,并且实现业务逻辑:变更视图,
或者通过模型修改数据,或者二者兼具。
真正让人困惑的是如何理解各层的作用,不同的框架往往会使用不同的方式实现同样的功能。一个框架“专
家”可能会说某个函数属于视图,另一个专家可能强烈反对,觉得应该放在控制器中。
Django 严格遵守 MVC 模式,但是有自己的实现逻辑。“C”部分由框架处理,多数时候,我们的工作在模
型、模板和视图中,因此 Django 经常被称为 MTV 框架。在 MTV 开发模式中:
• M 表示“模型”,即数据访问层。这一层包含所有与数据相关的功能:访问数据的方式、验证数据的方
式、数据的行为、数据之间的关系。第 4 章将深入探讨 Django 的模型。
• T 表示“模板”,即表现层。这一层包含表现相关的决策:在网页或其他文档类型中如何显示某个东
西。
• V 表示“视图”,即业务逻辑层。这一层包含访问模型和选择合适模板的逻辑。你可以把视图看做模型
和模板之间的桥梁。
Django的MTV分别代表:
Model(模型):负责业务对象与数据库的对象(ORM)
Template(模版):负责如何把页面展示给用户
View(视图):负责业务逻辑,并在适当的时候调用Model和Template
此外,Django还有一个urls分发器,它的作用是将一个个URL的页面请求分发给不同的view处理,view再调用相应的Model和Template
3.Django的基本命令
1.下载
pip install django(在cmd中)
2.创建一个Django项目
django-admin.py startproject mysite(最后一个是项目名称)
当前目录下会生成mysite的工程,目录结构如下:
- manage.py ----- Django项目里面的工具,通过它可以调用django shell和数据库等。
- settings.py ---- 包含了项目的默认设置,包括数据库信息,调试标志以及其他一些工作的变量(在settings中我们需要配置模板语言路径,以及静态文件路径)。
- urls.py ----- 负责把URL模式映射到应用程序。
3.在mysite目录下创建应用
python manage.py startapp blog(项目应用)
4.启动django项目
python manage..py runserver (后面可以指定ip和端口,默认是8000端口)
这样Django项目就启动起来了,我们访问http://127.0.0.1:8000 就可以看到
5.同步更新数据库中表或者是字段
python manage.py syncdb
注意:Django 1.7.1 及以上的版本需要用以下命令
python manage.py makemigrations
python manage.py migrate
以上这种方法可以创建表,当你在models.py中新增了类时,运行它就可以自动在数据库中创建表了,不用手动创建。
6.清空数据库
python manage.py flush
此命令会询问是 yes 还是 no, 选择 yes 会把数据全部清空掉,只留下空表。
7.创建超级管理员
python manage.py createsuperuser
# 按照提示输入用户名和对应的密码就好了邮箱可以留空,用户名和密码必填
# 修改 用户密码可以用:
python manage.py changepassword username
8.Django项目环境终端
python manage.py shell
这个命令和 直接运行 python 进入 shell 的区别是:你可以在这个 shell 里面调用当前项目的 models.py 中的 API,对于操作数据的测试非常方便。
9.Django项目环境终端进入数据库
python manage.py dbshell
Django 会自动进入在settings.py中设置的数据库,如果是 MySQL 或 postgreSQL,会要求输入数据库用户密码。
在这个终端可以执行数据库的SQL语句。如果您对SQL比较熟悉,可能喜欢这种方式。
10.查看所有的命令
python manage.py
查看所有的命令,忘记子名称的时候特别有用。
11.静态文件配置
概述:
静态文件交由Web服务器处理,Django本身不处理静态文件。简单的处理逻辑如下(以nginx为例):
URI请求-----> 按照Web服务器里面的配置规则先处理,以nginx为例,主要求配置在nginx.conf里的location
|---------->如果是静态文件,则由nginx直接处理
|---------->如果不是则交由Django处理,Django根据urls.py里面的规则进行匹配
以上是部署到Web服务器后的处理方式,为了便于开发,Django提供了在开发环境的对静态文件的处理机制,方法是这样:
static配置:
STATIC主要指的是如css,js,images这样文件:
STATIC_URL = '/static/' # 别名
STATICFILES_DIRS = (
os.path.join(BASE_DIR,"static"), #实际名 ,即实际文件夹的名字
)
注意点1:
django对引用名和实际名进行映射,引用时,只能按照引用名(static)来,不能按实际名去找
<script src="/statics/jquery-3.1.1.js"></script>
------error-----不能直接用,必须用STATIC_URL = '/static/':
<script src="/static/jquery-3.1.1.js"></script>
注意点2:(单独放在一个APP中的时候)
STATICFILES_DIRS = (
("app01",os.path.join(BASE_DIR, "app01/statics")),
)
<script src="/static/app01/jquery.js"></script>
4.django处理请求的基本流程
你在 Web 浏览器中访问
http://127.0.0.1:8000/hello/,看到“Hello world”消息,在这个过程中 Django 在背后做了什么呢?一切都从
设置文件开始。
运行 python manage.py runserver 命令时,manage.py 脚本在内层 mysite 目录中寻找名为 settings.py 的文
件。这个文件中保存着当前 Django 项目的全部配置,各个配置的名称都是大写的,例如 TEMPLATE_DIRS、
DATABASES,等等。其中最重要的设置是 ROOT_URLCONF。它告诉 Django,网站的 URL 配置在哪个 Python 模块
中。
记得吗?运行 django-admin startproject 命令时创建了 settings.py 和 urls.py 文件。自动生成的 settings.py 文件中包含 ROOT_URLCONF 设置,指向自动生成的 urls.py 文件。打开 settings.py 文件,你自己看
一下。应该会看到下述设置:
ROOT_URLCONF = 'mysite.urls'
这个模块对应的文件是 mysite/urls.py。收到针对某个 URL(假如是 /hello/)的请求时,Django 加载
ROOT_URLCONF 设置指定的 URL 配置;然后按顺序检查 URL 配置中的各个 URL 模式,依次与请求的 URL 比
较,直到找到匹配的模式为止。
找到匹配的模式之后,调用对应的视图函数,并把一个 HttpRequest 对象作为第一个参数传给视图。(后文
会详述 HttpRequest。)如我们编写的第一个视图所示,视图函数必须返回一个 HttpResponse 对象。
随后,余下的工作交给 Django 处理:把那个 Python 对象转换成正确的 Web 响应,并且提供合适的 HTTP 首
部和主体(即网页的内容)。综上:
1. 请求 /hello/。
2. Django 查看 ROOT_URLCONF 设置,找到根 URL 配置。
3. Django 比较 URL 配置中的各个 URL 模式,找到与 /hello/ 匹配的那个。
4. 如果找到匹配的模式,调用对应的视图函数。
5. 视图函数返回一个 HttpResponse 对象。
6. Django 把 HttpResponse 对象转换成正确的 HTTP 响应,得到网页。
现在,我们知道如何编写 Django 驱动的页面了。整个过程十分简单,只需编写视图函数,然后在 URL 配置
中与 URL 配对。
5.django错误页面的介绍
页面顶部是异常的关键信息:异常的类型和消息(这里是 "unsupported type"),抛出异常的文件,
以及所在的行号。
• 关键信息下面是异常的完整 Python 调用跟踪。这与 Python 命令解释器给出的标准调用跟踪类似,不
过能与之交互。对栈里的每一层(“帧”),Django 都会显示文件名、函数/方法名、行号和那一行的源
码。
• 点击源码所在的行(深灰色),会显示前后数行,为你提供上下文。点击每一帧下面的“Local vars”可
以查看那一帧抛出异常时所有局部变量及其值。这些信息能给调试提供极大的帮助。
• 注意“Traceback”标题旁边的“Switch to copy-and-paste view”文本。点击那些文本之后,调用跟踪会切换
到另一个版本,以便复制粘贴。如果想把异常的调用跟踪分享给他人(例如 Django IRC 或 Django 用
户邮件列表中友善的人),寻求技术支持,可以使用这个版本。
• 切换之后,底部会显示一个“Share this traceback on a public Web site”按钮,只需点击一下就能把调用跟
踪发布到网上。点击那个按钮之后,调用跟踪会发布到 dpaste 网站中,而且会得到一个 URL,便于分
享给其他人。
• 接下来是“Request information”(请求信息)部分,里面包含大量与导致错误的入站 Web 请求有关的信
息:GET 和 POST 信息、cookie 值,以及元信息,如 CGI 首部。附录 F 有一份关于请求对象中所含信息
的完整参考。
• “Request information”部分下面是“Settings”(设置)部分,列出 Django 当前的全部设置。
在某些情况下(如模板句法错误),Django 的错误页面还会显示更多信息。后文讨论 Django 的模板系统时
会说明这种情况。现在,把 offset = int(offset) 相关的那几行代码的注释去掉,让视图函数能正确运行。
如果你喜欢使用 print 语句调试,会发现 Django 的错误页面特别有用。
最后要说一点。显然,这些信息大都是敏感的,暴漏了内部的 Python 代码和 Django 配置,因此别天真地以
为可以在网上公开显示。不怀好意的人可以利用这些信息做逆向工程,然后在你的 Web 应用中做些坏事。鉴
于此,仅当 Django 项目处于调试模式时才会显示错误页面。现在,你只
需知道,Django 项目一开始都自动处于调试模式中。

浙公网安备 33010602011771号