译者注:英文书地址https://leanpub.com/tangowithdjango19/,做者为Leif Azzopardi 和 David Maxwell。本文仅为尝试、学习和交流,著做权利归做者全部。
另外,译者水平有限,错漏生硬之处敬请指出,定会第一时间改进。python
本书的目的在于为读者提供一个关于用Django和Python开发网站的实用指南。本书主要是面向学生的,对用Django创建和运行Web程序相关的步骤作一些演练。
本书但愿能对Django官方教程和其余网上能找到的优秀教程作补充。经过填补官方教程中的不少空白,并将全部东西融合到一块儿,用一个贯穿全书的实例来和你们一块儿学习Django框架。另外,本书还介绍了网络应用开发涉及到的不少其余方面(好比 HTML,CSS,Javasript等)。web
本书能够节省你的时间。咱们以前发现不少聪明的学生花费大量的时间学习Django和网络开发的其余方面,可是很是吃力。而问题每每在于教程中某个关键部分的信息缺失,或者讲述不清楚。这耽误的时间短则十几分钟,长则好几个小时。咱们则试着尽可能去除了这种障碍。这意味着读者能够顺利的开发本身的应用,而再也不磕磕绊绊。数据库
本书下降了学习曲线。网络应用框架能够节省不少时间,免去不少困扰,可是前提是你知道怎么恰如其分的使用它。然而一般框架的学习曲线很陡峭。本书尝试经过解释各个部分怎么结合到一块儿,来使读者更容易更快的学会Django。django
本书将改进你的工做流程。使用网络框架,要求你学会并遵循特定的模式-这样你只须要在特定的位置填入特定的代码。教过这么多学生以后,咱们听到不少关于使用web框架的抱怨-尤为是关于它们怎么变得失控(好比反向控制)。针对这个问题,咱们创建了关于各开发步骤的工做流程,让你能够用训练有素的方式掌控本身的网络应用。设计模式
本书不是设计用来读的。不管如何,不要读这本书。这是一个手把手教你用Django创建网络应用的教程。读不能代替动手。实际的演练、开发应用,才能积累经验。当你输入应用的代码时,千万不要只是复制黏贴。手动输入,同时思考它时干吗用的,而后再看咱们提供的解释。若是这样你仍是没搞懂,就去查官方文档,或者到Stack Overflow或其余有用的网站查询,务必把这部分空白填补上。若是实在搞不定,联系做者,这样咱们能够改进教程。浏览器
在这本书中,咱们将使用基于实例的方法,展现怎么设计一个叫作Rango的web应用,在此过程当中,逐步教读者怎么完成如下主要任务。服务器
在每章的末尾,咱们加入了一些练习题,用于巩固和测试你刚学的知识。cookie
在本书中,咱们将用到各类技术和外部服务,包括:网络
咱们之因此选择这些技术和服务,是由于它们不只是web开发的基础,同时也让咱们能够用实例来演示怎么在你的web应用中运用它们。session
这本书的核心是开发一个叫作Rango的应用。在开发的过程当中,教程将覆盖到创建任何一个web应用所必须的核心部分。若是想查看完整版本的Rango应用,请访问 How to Tango with Django 网站。
假设你的客户但愿你创建一个叫作Rango的网站,使用户能够经过自定义的分类访问各类网页。在西班牙语中,Rango意为“根据性质归类的联合体”或者“某个社会等级制度中的某个位置”。
乍一看,这个要开发的应用至关简单。基本上只是一个连接到相关页面的分类列表。然而,其实有至关多的复杂问题和挑战等着咱们去解决。首先,让咱们试着经过概要设计来描绘一下将要开发的应用。
在继续往下看以前,想一想那些说明,描绘下面这些设计图。
试着在把这些作出来-即便你对系统架构图、线框图、实体-关系图并不熟悉,也试着解释和描述一下你接下来要建立的东西。
大部分web应用的高层架构都是3层的。Rango接合了一些外部服务,因此在3层架构的基础上有些变化。
Rango应用的3层系统架构概览
因为使用Django建立web应用,咱们将在这些层中使用如下技术:
这本书的大部份内容聚焦于开发该中间件。经过系统架构图咱们就能明显的看出它须要与全部其余部件结合。
对于向客户展现一个应用程序完成时应该是什么样子,线框图是一个很好的方法。它们能节省不少时间,从手绘到实体模型,无论你有什么样的条件均可以制做。对于咱们的Rango应用程序,咱们但愿将主页作成下面这样。咱们的分类页面也在下面展现了。
主页
分类页面
从上面的说明中,咱们已经定义了两个将呈现给用户的页面。咱们须要描述URL映射来访问这些页面。URL映射至关于用户访问页面时在浏览器地址栏输入的文本。Rango的一些基本URL映射以下所示:
当咱们建立应用程序时,将会建立一些其余的URL映射。不过上面这个清单是个开端,并且让咱们有了访问不一样页面的办法。一样,随着本书的深刻,咱们会逐步具体化怎么用Django框架和模型-视图-模板模式创建这些页面。如今咱们列出了关于URL映射和页面外观的一些要点,还须要定义数据模型用于储存咱们web应用的数据。
经过前文的说明,显然咱们至少有两个实体:一个是分类,另外一个是页面。并且,一个分类下会包括多个页面。咱们能够用下面的实体-关系图来描述这个简单的数据模型。
Rango两个主要实体的实体-关系图(ER diagram)
请注意,这个说明至关含糊。理论上,某个页面能够存在于一个或多个分类中。若是要考虑到这种状况,咱们要在分类和页面之间创建多对多关系(many-to-many relationship)。可是这种方法涉及到不少比较复杂的知识,因此咱们先作最简单的假设:一个分类包含多个页面,可是一个页面只能属于一种分类。这并无禁止某个页面被分配到不一样的分类中,可是这样的话该页面有两个入口,不太理想。
注意
要养成随时记录下你在工做中所作假设的习惯,好比上文咱们设想的一对多关系。你永远不知道何时它们会再出问题。记录下来,意味着你能够跟你的开发团队沟通,确保所作的假设是明智的,并且他们和乐意顺着这种假设继续前进。
经过这个假设,咱们能够制做一系列表格来具体描述每一个实体。表格记录了每一个实体包含的字段。咱们用Django的模型字段类型来定义每一个字段。(好比 IntegerField, CharField, URLField 或者 ForeignKey)。注意,Django的主键(primary keys)是隐式的,Django为每一个模型添加了id,咱们会在模型和数据库章节作详细讲解。
Category Model
Field | Type |
---|---|
name | CharField |
views | IntegerField |
likes | IntergerField |
PageModel
Field | Type |
---|---|
category | ForeignKey |
title | CharField |
url | URLField |
views | IntegerField |
还会有一个用户模型,用于用户注册和登陆。咱们没有在这里谈到,可是会在后续用户认证章节进行讨论。在下面的章节中,咱们会学习怎么在Django中实例化这些模型,以及怎么使用内建的ORM(Object Relational Mapping, 对象关系映射)链接数据库。
在创建咱们的web应用时,这些高级设计和说明能够做为有用的参考。这些步骤对大部分数据库驱动的网站来讲时通用的。学会阅读和制做这样的说明及设计,你就能够与别人沟通你的设计和想法。本书中咱们将主要运用Django和其余相关技术来实现这些设计方案。
复制粘贴代码
当阅读教程时,你可能想要把书中的代码复制粘贴到你的编辑器中。可是,最好手动输入。咱们知道这有点麻烦,可是能够帮助你更好的记住那些之后须要用到的过程和命令。
另外,直接复制粘贴代码是在自找麻烦。复制的代码中空白区域多是空格或者制表符,甚至空格和制表符都有。这会致使各类稀奇古怪的错误,和没必要要的缩进错误。若是你真要复制粘贴代码,必定要注意这些。尤为是当你使用Python3时更要注意——不能始终如一的使用制表符或者空格来缩进的话,会出发TabError(不一致的制表符错误)。
大部分代码编辑器都会显示空白区域,而且显示它是制表符仍是空格。若是你的编辑器也有这个功能,请让它保持开启,能够避免不少困扰。