内容字号:默认大号超大号

段落设置:段首缩进取消段首缩进

字体设置:切换到微软雅黑切换到宋体

初识Django详解

2018-09-11 22:09 出处:清屏网 人气: 评论(0

Django 简介

Django:一款能够节约你的时间并且让开发乐趣横生的 web 开发框架。使用Django,花极少时间即可构建和维护质量上乘的 Web 应用。通过减少重复的代码,Django 使你能够专注于 web 应用上有 趣的关键性的东西。为了达到这个目标,Django 提供了通用 Web 开发模式的高度抽象,提供了频繁进行的编程作业的快速解决方法,以及为“如何解决问题”提供了清晰明了的约定。同时,Django 尝试留下一些方法,来让你根据需要在 framework 之外来开发。

一 什么是web框架

  1. 当多个动态页面需要同时连接数据库时,将会发生什么?当然,连接数据库的代码不应该同时存在于各个独立的 CGI 脚本中,所以最踏实的做法是把这些代码重新组织到一个公共函数里面。
  2. 一个开发人员 确实 需要去关注如何输出 Content-Type 以及完成所有操作后去关闭数据 库么?此类问题只会降低开发人员的工作效率,增加犯错误的几率。那些初始化和释放 相关的工作应该交给一些通用的框架来完成。
  3. 如果这样的代码被重用到一个复合的环境中会发生什么?每个页面都分别对应独立的数据库和密码吗?从这点看来,就需要一些环境相关的配置文件。
  4.  如果一个 Web 设计师,完全没有 Python 开发经验,但是又需要重新设计页面的话,又将 发生什么呢?理想的情况是,页面显示的逻辑与从数据库中读取书本记录分隔开,这样 Web 设计师的重新设计不会影响到之前的业务逻辑

以上正是 Web 框架致力于解决的问题。Web 框架为应用程序提供了一套程序框架, 这样你可以专注于编写清晰、易维护的代码,而无需从头做起。简单来说,这就是 Django 所能做的。

二 MVC设计模式

MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller),具有耦合性低、重用性高、生命周期成本低等优点。

让我们来研究一个简单的例子,通过该实例,你可以分辨出,通过 Web 框架来实现的功能与之前的方式有何不同。下面就是通过使用 Django 来完成以上功能的例子:


 1 # models.py (the database tables)
 2 from django.db import models
 3 class Book(models.Model):
 4 name = models.CharField(maxlength=50)
 5 pub_date = models.DateField()
 6 # views.py (the business logic)
 7 from django.shortcuts import render_to_response
 8 from models import Book
 9 def latest_books(request):
10 book_list = Book.objects.order_by('-pub_date')[:10]
11 return render_to_response('latest_books.html', {'book_list': book_list})
12 # urls.py (the URL configuration)
13 from django.conf.urls.defaults import *
14 import views
15 urlpatterns = patterns('',
16 (r'latest/$', views.latest_books),
17 )
18 # latest_books.html (the template)
19 <html><head><title>Books</title></head>
20 <body>
21 <h1>Books</h1>
22 <ul>
23 {% for book in book_list %}
24 <li>{{ book.name }}</li>
25 {% endfor %}
26 </ul>
27 </body></html>

View Code
  • models.py 文件主要用一个 Python 类来描述数据表。称为 模型(model) 。 运用这

    个类,你可以通过简单的 Python 的代码来创建、检索、更新、删除 数据库中的记录

    而无需写一条又一条的 SQL 语句。

  • view.py 文件的 latest_books() 函数中包含了该页的业务层逻辑。这个函数叫做 视图(view) 。
  • urls.py 指出了什么样的 URL 调用什么的视图,在这个例子中 /latest/ URL 将会调用 latest_books() 这个函数

  • latest_books.html 是 html 模板,它描述了这个页面的设计是如何的。

这些部分松散的组合在一起就是模型-视图-控制器(MVC)的设计模式。简单的说, MVC 是一种软件开发的方法,它把代码的定义和数据访问的方法(模型)与请求逻辑 (控制器)还有用户接口(视图)分开来。

这种设计模式关键的优势在于各种组件都是 松散结合的。这样,每个由 Django 驱动 的 Web应用都有着明确的目的,并且可独立更改而不影响到其它的部分。比如,开发者 更改一个应用程序中的 URL 而不用影响到这个程序底层的实现。设计师可以改变 HTML 页面 的样式而不用接触 Python 代码。数据库管理员可以重新命名数据表并且只需更改一个地方,无需从一大堆文件中进行查找和替换。

三 Django常见命令

在Django的使用过程中需要使用命令让Django进行一些操作,例如创建Django项目、启动Django程序、创建新的APP、数据库迁移等。

1创建Django项目

一把我们都新建一个文件夹来存放项目文件,切换到这个目录下,启动命令行工具。创建一个名为mysite的Django项目:

django-admin startproject mysite

创建好项目之后,可以查看当前目录下多出一个名为mysite的文件夹,mysite的文件夹目录结构如下:

mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        wsgi.py

__init__.py :让 Python 把该目录当成一个开发包 (即一组模块)所需的文件。
manage.py :一种命令行工具,可让你以多种方式与该 Django 项目进行交互。
settings.py :该 Django 项目的设置或配置。
urls.py :该 Django 项目的 URL 声明,即 Django 所支撑站点的内容列表

2启动Django项目

启动项目的时候,需要切换到mysite目录下,执行如下命令:

python manage.py runserver  #默认使用8000端口

命令后面还可以指定参数:

python manage.py runserver 8888  #8888为新指定的端口
python manage.py runserver 127.0.0.1:8000  #还可以指定IP和端口,冒号分割

3创建APP

一个Django项目可以分为很多个APP,用来隔离不同功能模块的代码。

(1)命令行创建

python manage.py startapp app01

执行命令后,项目目录下多出一个app01的文件夹,目录结构如下:

app01/
    migrations
        __init__.py
    __init__.py
    admin.py
    apps.py
    models.py
    tests.py
    views.py

(2)使用PyCharm创建

可以使用PyCharm的manage.py工具来执行命名。在主菜单栏中选择Tools,在下拉菜单中选择Run manage.py task,会出现如下图所示的工具对话框:

在弹出的命令窗口中直接输入下面的命令便可创建app:

startapp app01

使用PyCharm的manage.py工具执行命令时,只用输入命令及参数即可,不再输入python manage.py了。

4数据库迁移

python manage.py makemigrations
python manage.py migrate

5创建超级用户

python manage.py createsuperuser

6 更改主机或端口

python manage.py runserver 8080
python manage.py runserver 0.0.0.0:8080 //会让 Django 监听所有网络接口,因此也就让其它电脑可连接到开发服务器了。

四 Django 是如何处理请求的

Django 请求回应流程

  1. 当服务器收到一个 HTTP 请求以后,一个服务器特定的 handler 会创建 HttpRequest 并传递给下一个组件并处理。
  2. 这个 handler 然后调用所有可用的 Request 或者 View 中间件。这些类型的中间件通常是用来 增强 HttpRequest 对象来对一些特别类型的 request 做些别处理。只要其中有一个 返 回 HttpResponse ,系统就跳过对视图的处理。
  3. 即便是最棒的程序员也会有出错的时候, 这个时候 异常处理中间件( exception middleware ) 可以帮你的 大忙。如果一个视图函数抛出异常,控制器会传递给异常处理中间件处理。如果这个 中间件没有返回 HttpResponse ,意味着它不能处理这个异常,这个异常将会再次抛出。
  4. 即便是这样,你也不用担心。Django 包含缺省的视图来生成友好的 404 和 500 回应 (response)。

5. 最后, response middleware 做发送 HttpResponse 给浏览器之前的后处理或者清除 请求 用到的相关资源。

五 其他补充

1 Django 和 URL 配置背后的哲学:

松耦合原则。简单的说,松耦合是一 个 重要的保证互换性的软件开发方法。如果两段代码是松耦合的,那么改动其中一段代码不 会 影响另一段代码,或者只有很少的一点影响。

Django 的 URL 配置就是一个很好的例子。在 Django 的应用程序中,URL 的定义和视图函数之 间是松 耦合的,换句话说,决定 URL 返回哪个视图函数和实现这个视图函数是在两个不同的 地方。这使得 开发人员可以修改一块而不会影响另一块。

2 404 错误

Page not found”页面只会在 调试模式(debug mode)下显示

3关于漂亮URL的建议

如果你有其他 Web 开发平台的经验,例如 PHP 或者 JAVA,你可能会想,好吧,让我们来用一 个 查询字符串参数来表示它们吧,例如 /time/plus?hours=3 ,哪个时间段用 hours 参数 代表,URL 的查询字符串(query string)是 URL 里 ? 后面的字符串。 你 可以 在 Django 里也这样做 (如果你真的想要这样做,我们稍后会告诉你怎么做), 但 是 Django 的一个核心理念就是 URL 必须看起来漂亮。URL /time/plus/3/ 更加清晰, 更简 单,也更有可读性,可以很容易的大声念出来,因为它是纯文本,没有查询字符串那么 复杂。 漂亮的 URL 就像是高质量的 Web 应用的一个标志。 Django 的 URL 配置系统可以使你很容易的设置漂亮的 URL,而尽量不要考虑它的 反面 。

分享给小伙伴们:
本文标签: Django

相关文章

发表评论愿您的每句评论,都能给大家的生活添色彩,带来共鸣,带来思索,带来快乐。

CopyRight © 2015-2016 QingPingShan.com , All Rights Reserved.

清屏网 版权所有 豫ICP备15026204号