2. 概述
这本书的目的是为您提供一个使用Django 1.7web开发的使用指南。这本书主要是为学生设计的,提供一个描述所涉及的步骤让你的第一个web应用程序启动和运行,以及将它们部署到web服务器。
这本书旨在补充official Django Tutorials和许多其他优秀的网上教程。把所有的东西集中在一个地方,这本书中提供了一个基于实例设计驱动的方法学习Django框架填充官方Django的许多空白文档。此外,这本书介绍了很多掌握web应用开发所需要的环节。
这本书的主要作用
- 这本书将会节省你的时间: 在很多场合我们会看见许多聪明的学生会被卡住,花费数小时试图和Django和网络开发等方面做斗争。通常情况下,这个问题通常是因为一个关键信息没有提供,或者是某些方面没有做清晰的阐述。虽然偶尔可能灵光一现让你花费10-15分钟,有时他们需要花费几个小时的时间才能解决。我们试图消除尽可能多的这些障碍。这将意味着你可以继续开发您的应用程序,而不必坐在那里挠你的头。
- 这本书将降低学习曲线: Web应用程序框架可以为您节省很多麻烦和大量的时间。嗯,这是如果你知道如何使用它们摆在首位!通常情况下,学习曲线比较陡峭。这本书试图让你去学习-而且学得很快。这本书缩短学习曲线,向您展示了如何整合一个web应用程序的所有的钟声和汽笛。
- 这本书将改善您的工作流: 使用web应用程序框架需要你上手和使用一个特定的设计模式,所以你只需要在某些地方填写某些片段。与许多学生工作后,我们听到很多抱怨使用web应用程序框架,特别是他们如何控制远离它们(控制反转)。为了帮助您,我们已经创造了许多工作流集聚焦在你的开发过程中,这样你就可以重新获得控制,有纪律的方式建立自己的Web应用程序。
- 这本书并不是设计成只读: 无论你做什么,不要读这本书!这是一个在Django构建web应用程序的实践指南。阅读不是做。通过开发实践应用程序来增加获得经验和价值。在你编写的应用程序时,不要剪切和粘贴代码。在键入它时,想想它是做什么,然后阅读我们提供描述正在发生的事情的解释。如果你还不理解,那么看看Django文档,去Stack Overflow 或其他有用的网站,弥补你的知识差距。如果你认为值得一提的是,请与我们联系,以便我们可以改善这本书,我们已经拥有了一些贡献者,我们会愉快地承认你的贡献!
您将学到什么
在这本书中,我们将采取一个exampled-based方法(研究性学习)。这本书将告诉你如何设计一个名为Rango的web应用程序(参见下面2.4.1节设计纲要)。在这个过程中,我们将向您展示如何执行以下任务。
- 配置一个开发环境,包括如何使用终端,Pip安装程序,如何使用Git等等.
- 配置Django项目并创建一个基本的Django应用程序。
- 配置Django项目提供静态媒体和其他媒体文件。
- 使用Django的Model-View-Template设计模式。
- 创建数据库模型,并使用Django提供的对象关系映射的功能。
- 创建表单,可以利用您的数据库模型来创建动态生成的网页。
- 使用Django提供的用户身份验证服务。
- 外部服务合并到应用程序。
- 包括层叠样式表(CSS)和JavaScript在web应用程序中的使用。
- 设计和应用CSS来提高web应用程序的外观和感觉。
- Django中使用cookie和sessions。
- 包括像AJAX应用程序更高级的功能。
- 将应用程序部署到一个web服务器使用PythonAnywhere。
每一章结束时,我们已经包括了大量的练习,试图让你更难,看看你是否能应用所学到的东西。这本书的后面的章节提供了大量的开放式开发练习以及编码解决方案和解释。最后,所有的代码可以从GitHub https://github.com/leifos/tango_with_django 获得。
看到一个全功能版本的应用程序,您还可以访问How to Tango with Django的Rango网站http://www.tangowithdjango.com/rango/。
技术和服务
通过这本书的过程中,我们将使用各种技术和外部服务,包括:
Python, http://www.python.org
Pip, http://www.pip-installer.org
Django, https://www.djangoproject.com
Git, http://git-scm.com
GitHub, https://github.com
HTML, http://www.w3.org/html/
CSS, http://www.w3.org/Style/CSS/
Javascript
JQuery, http://jquery.com
Twitter Bootstrap, http://getbootstrap.com/
Bing Search API via Azure Datamarket, http://datamarket.azure.com
PythonAnywhere, https://www.pythonanywhere.com
我们选择这些技术和服务,因为他们要么是web开发的基础,要么是使我们能够提供如何将web应用程序集成的例子与CSS工具包(像Twitter Bootstrap),提供的外部服务(微软Azure)和部署您的应用程序快速、轻松地(PythonAnywhere)。
Rango:初步设计和规范
正如前面提到的,这本书的重点是开发一个称为Rango的应用程序。当我们开发这个应用程序,将涵盖需要开发构建任何web应用时的核心组件。
设计大纲
你的客户希望你能创建一个名为Rango的网站,允许用户浏览通过用户定义的类别访问各种网页。在西班牙,Rango这个词是用来表示“联赛由质量排名”或“在社会等级中各自不同的位置”(见https://www.vocabulary.com/dictionary/es/rango)。
- 网站的主页,他们希望游客可以看到:
- 最多浏览五页
- 最多5种Rango分类
- 一些方法,供游人浏览或搜索类别。
- 当用户查看分类页面,他们希望它显示:
- 类别名称,访问的次数,喜欢的号码;
- 随着类别的相关页面列表(显示页面的标题和链接到它的url);
- 一些搜索功能(通过必应搜索API),以发现可以链接到这个类别的其他页面。
- 对于一个特定的类,则客户机想要被记录的类别的名称,每个类别页被访问的次数,以及有多少用户点击一个“喜欢”按钮(即页面获取rango’ed,和社会等级投票)。
- 每个类别应该通过一个可读的URL(例如,/rango/ books-about-django /。
- 只有注册用户将能够搜索和添加页面类别。因此,网站访问者应该能够注册一个帐户。
乍一看,应用程序开发似乎相当简单。从本质上说,它只是一个的类别列表的链接页面,对吗?然而,有许多需要解决的复杂性和挑战。首先,让我们尝试建立一个更好地了解哪些需要通过制定一些高层次的设计开发。
练习
在继续之前,想想这些规范,并制定了以下设计文物。
- 一个n层或系统架构图。
- 主要页面的线框图和分类页面。
- URL映射
- 实体关系图来描述我们将要实现的数据模型。
N层架构
对于大多数Web应用程序的高层架构是一个3层架构。Rango将在此架构上的变体,因为它与外部服务接口。
- Figure 1: Overview of the system architecture for Rango. Note the inclusion of an external Search Application Programming Interface (API).
- 该客户端将网络浏览器(如Chrome浏览器,火狐,Safari浏览器等),这将使得HTML / CSS页面。
- 中间件将是一个Django应用程序,而在我们发展将通过Django的内置开发Web服务器发送。
- 数据库将基于python的SQLite3数据库引擎。
- 搜索API将Bing搜索API。
框架
———– 线框图是伟大的方式为客户提供一些想法完成时的应用程序应该是什么样子。他们节省大量时间,可以从手绘草图原型的不同取决于可用的工具。对于Rango,我们想让网站的索引页面看起来像图2中所示的屏幕截图。我们的类别页面如图3所示。 ![图2](https://img-blog.csdn.net/20150904105204052)- Figure 2: The index page with the categories bar on the left, also showing the top five pages and top five categories.
- Figure 3: The category page showing the pages in the category (along with the number of views). Below, a search for Python has been conducted, with the results shown underneath.
页面和URL映射
——– 从规范,我们已经确定了两种我们的应用程序将在不同的时间点呈现给用户的页面。访问这些页面,我们将以某种方式需要描述的URL映射。想想一个URL映射作为文本,用户将不得不进入到浏览器的地址栏,以达到给定的页面。Rango的基本URL映射如下所示。- /rango/将指向主(或索引)页面视图。
- /rango/about/将指向一个about页面视图。
- /rango/category/[category_name]/将指向[category_name ]类别页面视图,其中类别可能是:
- games;
- Python 方法;
- 编码和编译;
- /rango/etc/,etc可能会被替换与我们要实现任何以后功能的URL。
随着我们通过这本书的学习,我们将充实如何使用Django框架来构建这些页面,并利用其模型 - 视图 - 模板设计模式。然而,现在,我们有一个要点的URL映射,页面将会是什么样子,我们需要定义数据模型,将为我们的web应用程序的数据。
实体-关系图
考虑到规范,应该清楚,我们至少有两个实体:一个类别,一个页面。还应当清楚的是,类别可以容纳许多页。我们可以制定以下ER图来描述这个简单的数据模型。
- Figure 4: The Entity Relationship Diagram of Rango’s two main entities.
注意,这个规范是模糊。一个页面可以在一个或多个类别。所以我们的模型可以作为一个多对多的关系。然而,这种方法引入了许多复杂性,因此,我们将简单地假设一个类别包含许多页面,但是一个页面被分配给一个类别。这并不排除在同一页可以被分配到不同的类别 - 但是页面必须被输入两次,这可能不理想。
这是很好的做法,记下任何工作假设是这样的。你永远不知道他们什么时候会回来困扰你!通过记录下来,这意味着你可以用你的开发团队沟通,并确保该假设是合理的,他们很高兴继续在这样的假设。
结果表如下所示,str指string或char类型,Int指integer类型,URL指URL类型和FK指外键。
Filed | Type |
---|---|
name | Str |
views | Int |
likes | Int |
Filed | Type |
---|---|
category | FK |
title | Str |
url | URL |
views | Int |
总结
———– 这些高层次的设计和说明将构建我们的Web应用程序时,可以作为一个有用的参考点。虽然我们将重点放在使用特定技术,这些步骤适用于大多数数据库驱动的网站。这是一个好主意,成为熟悉和适应生产这种规格和设计。 如果你已经安装了Python 2.7和Django 1.7,你有一个良好的工作知识的命令行,配置你的路径,那么您可以跳过直接Django基础章节。否则,从第三章开始。使用Django官方的教程
———————- 我们建议进行了[Official Django Tutorials](https://docs.djangoproject.com/en/1.7/intro/tutorial01/) 作为与每本书的章节相关的演习的一部分。你可以找到的教程练习和书籍章节下面之间的映射。本教程演习将有助于加强你的Django框架的理解,并帮助你建立你的技能。Tango with Django | Django Tutorial |
---|---|
Chapter 3 | Part 1 - Models |
Chapter 5 | Part 2 - The Admin Interface |
Chapter 6 | Part 3 - URLs and Views |
Chapter 7 | Part 4 - Templates |
Chapter 18 | Part 5 - Testing |
Chapter 11 | Part 6 - CSS |
原文:http://www.tangowithdjango.com/book17/chapters/overview.html