譯者注:英文書地址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(不一致的製表符錯誤)。
大部分代碼編輯器都會顯示空白區域,而且顯示它是製表符仍是空格。若是你的編輯器也有這個功能,請讓它保持開啓,能夠避免不少困擾。