Django(一):简单介绍


内容为学习The Django Book 2.0–中文版的笔记:
http://docs.30c.org/djangobook2/chapter02/index.html

什么是Django

一个可以使Web开发工作愉快并且高效的Web开发框架。
使用Django,使你能够以最小的代价构建和维护高质量的Web应用。

CGI标准

CGI(Common Gateway Interface)是WWW技术中最重要的技术之一 , 有着不可替代的重要地位 , CGI是外部应用程序(CGI程序)于Web服务器之间的接口标准 , 是CGI程序和Web服务器之间传递信息的规程 。 CGI规范允许Web服务器执行外部程序 , 并将它们的输出发送给Web浏览器 。
示例:
个人主页上大部分都有一个留言本 . 留言本的工作是这样的 : 先由客户端输入一些信息 , 如名字之类的东西 。接着用户按一下 " 留言 " (到目前为止的工作都在客户端进行) , 浏览器把这些信息传送到服务器的CGI目录下特定的CGI程序中 , 于是CGI程序在服务器上按照指定的方法进行处理 。 在本例中就是把用户提交的信息存入指定的文件中 . 然后CGI程序给客户端发送一个信息 , 表示请求的任务已经结束 。 此时用户在浏览器里面看到 " 留言结束 " 的字样 。
绝大多数的CGI程序用于解释处理来自表单的输入信息 , 并在服务器产生相应的处理 , 或将相应的信息反馈给浏览器 . CGI程序使得网页具有交互功能。
信息来源于:https://www.cnblogs.com/A-FM/p/5789261.html
处理步骤:
1 : 通过internet把用户请求发送到Web服务器
2 : Web服务器结束用户请求并且交给CGI程序处理 .
3 : CGI 程序把处理结果传送给Web服务器 .
4 : Web服务器把结果传送给用户 .

框架是什么

使用Python开发Web,最简单,原始和直接的办法是使用CGI标准。
示例:使用Python 显示数据库中最新出版的10本书:

  1. 不使用框架的方式:首先做一个Python脚本,输出HTML代码,然后保存成.cgi扩展名的文件,通过浏览器访问此文件。
    即用户请求CGI,然后连接数据库并执行一些查询操作,获取最新的十本书。 在遍历这些书的同时,生成一个书名的HTML列表项。 最后,输出HTML的结束标签并且关闭数据库连接。把脚本保存为一个 latestbooks.cgi 的 文件,上传到网络服务器上,通过浏览器访问即可。
    这样做会有哪些不便:
  • 类似连接关闭数据库这种操作是各个脚本中很容易重复出现的操作,这种代码应该写到一个共享函数,可以被多个代码调用。
  • 类似的,脚本开头的初始化以及结束时的释放操作等应该交给通用的框架去完成,让开发专人做专事,而不是什么事都要去了解专注,这样只会降低开发人员的工作效率,增加犯错误的几率。
    -页面显示的逻辑与从数据库中读取信息的操作应该分隔开,这样 Web设计师的重新设计不会影响到之前的业务逻辑。
    -不同的脚本会被重用到一个复合的环境中,不可能每个页面都分别对应独立的数据库和密码。
    Web框架为应用程序提供了一套程序框架, 这样你可以专注于编写清晰、易维护的代码,而无需从头做起。
  1. 利用框架来实现:
# models.py (the database tables)

from django.db import models

class Book(models.Model):
    name = models.CharField(max_length=50)
    pub_date = models.DateField()


# views.py (the business logic)

from django.shortcuts import render_to_response
from models import Book

def latest_books(request):
    book_list = Book.objects.order_by('-pub_date')[:10]
    return render_to_response('latest_books.html', {'book_list': book_list})


# urls.py (the URL configuration)

from django.conf.urls.defaults import *
import views

urlpatterns = patterns('',
    (r'^latest/$', views.latest_books),
)


# latest_books.html (the template)

<html><head><title>Books</title></head>
<body>
<h1>Books</h1>
<ul>
{% for book in book_list %}
<li>{{ book.name }}</li>
{% endfor %}
</ul>
</body></html>

分成4个Python的文件,(models.py , views.py , urls.py ) 和html模板文件 (latest_books.html )。

  1. models.py 文件主要用一个 Python 类来描述数据表。 称为 模型(model) 。 运用这个类,你可以通过简单的 Python 的代码来创建、检索、更新、删除 数据库中的记录而无需写一条又一条的SQL语句。
  2. views.py文件包含了页面的业务逻辑。 latest_books()函数叫做视图。
  3. urls.py 指出了什么样的 URL 调用什么的视图。 在这个例子中 /latest/ URL 将会调用 latest_books() 这个函数。 换句话说,如果你的域名是example.com,任何人浏览网址http://example.com/latest/将会调用latest_books()这个函数。
  4. latest_books.html 是 html 模板,它描述了这个页面的设计是如何的。 使用带基本逻辑声明的模板语言,如{% for book in book_list %}

MVC 设计模式(模型-视图-控制器)

MVC 是 Model-View-Controller 的缩写:

  1. Modle 代表数据存储层,是对数据表的定义和数据的增删改查;
  2. View 代表视图层,是系统前端显示部分,它负责显示什么和如何进行显示;
  3. Controller 代表控制层,负责根据从 View 层输入的指令来检索 Model 层的数据,并在该层编写代码产生结果并输出。
    这种设计模式关键的优势在于各种组件都是 松散结合的。这样,每个由 Django驱动 的Web应用都有着明确的目的,并且可独立更改而不影响到其它的部分。 比如,开发者 更改一个应用程序中的 URL 而不用影响到这个程序底层的实现。 设计师可以改变 HTML 页面 的样式而不用接触 Python 代码。 数据库管理员可以重新命名数据表并且只需更改一个地方,无需从一大堆文件中进行查找和替换。
    MVC 设计模式的请求与响应过程描述如下:
    用户通过浏览器向服务器发起 request 请求,Controller 层接受请求后,同时向 Model 层和 View 发送指令;
    Mole 层根据指令与数据库交互并选择相应业务数据,然后将数据发送给 Controller 层;
    View 层接收到 Controller 的指令后,加载用户请求的页面,并将此页面发送给 Controller 层;
    Controller 层接收到 Model 层和 View 层的数据后,将它们组织成响应格式发送给浏览器,浏览器通过解析后把页面展示出来。

Django架构设计(MTV)

Django是一个基于MVC构造的框架。但是在Django中,控制器接受用户输入的部分由框架自行处理,所以Django里更关注的是模型(Model)、模板(Template)和视图(Views),称为MTV模式。

部分作用
模型(数据库存取层)处理与数据相关的所有事物,存取、有效性验证、数据之间的关系等
视图(表现层)处理与表现相关的决定,如何在页面或者其他类型文档中进行显示
模板(业务逻辑层)存取模型以及调取恰当模板的相关逻辑,模型与模板之前的桥梁

Django视图不处理用户输入,而仅仅决定要展现哪些数据给用户;
Django模板仅仅决定如何展现Django视图指定的数据。或者说,Django将MVC中的视图进一步分解为Django视图和Django模板两个部分,分别决定“展现哪些数据”和“如何展现”,使得Django的模板可以根据需要随时替换,而不仅仅限制于内置的模板。
至于MVC控制器部分,由Django框架的URLconf来实现。URLconf机制是使用正则表达式匹配URL,然后调用合适的Python函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值