屌丝程序猿
努力学python的屌丝.

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,而尽量不要考虑它的 反面 。

posted on 2018-09-11 14:57  越努力越幸福i  阅读(193)  评论(0编辑  收藏  举报