Tango with Django 1.9 中文——1.概述

譯者注:英文書地址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應用,在此過程當中,逐步教讀者怎麼完成如下主要任務。服務器

  • 怎麼設置開發環境-包括命令行工具,虛擬環境,pip包安裝工具,使用Git等等。
  • 創建Django項目,並創建基礎的Django應用。
  • 練習使用Django的Model-View-Template設計模式。
  • 創建數據庫模型,並使用Django的對象關係映射(ORM)功能。
  • 創建表單,以利用數據庫模型創建動態生成的網頁。
  • 使用Django的用戶認證系統。
  • 在Django應用中融入其餘功能
  • 在web應用中使用層疊樣式表(CSS)和JavaScript。
  • 用CSS爲你的應用營造專業的觀感。
  • 在Django中使用cookies和sessions。
  • 在你的應用中加入其餘進階功能,好比AJAX。
  • 用PythonAnywhere將你的應用部署到網絡服務器上。

在每章的末尾,咱們加入了一些練習題,用於鞏固和測試你剛學的知識。cookie

技術與服務

在本書中,咱們將用到各類技術和外部服務,包括:網絡

  • Python
  • Pip package manager
  • Django
  • Git
  • GitHub
  • HTML
  • CSS
  • JavaScript
  • JQuery
  • Twitter Bootstrap
  • Bing Searc API via Azure Datamarket
  • PythonAnywhere

咱們之因此選擇這些技術和服務,是由於它們不只是web開發的基礎,同時也讓咱們能夠用實例來演示怎麼在你的web應用中運用它們。session

Rango:初始設計和說明

這本書的核心是開發一個叫作Rango的應用。在開發的過程當中,教程將覆蓋到創建任何一個web應用所必須的核心部分。若是想查看完整版本的Rango應用,請訪問 How to Tango with Django 網站。

設計概要

假設你的客戶但願你創建一個叫作Rango的網站,使用戶能夠經過自定義的分類訪問各類網頁。在西班牙語中,Rango意爲「根據性質歸類的聯合體」或者「某個社會等級制度中的某個位置」。

  • 在Rango網站的主頁中,你的客戶但願訪客能夠看到:
    • 五個瀏覽量最多的頁面;
    • 五個瀏覽量最多的分類;
    • 訪客要能夠經過分類進行瀏覽或搜索。
  • 當訪客瀏覽分類頁面時,客戶但願Rango能夠顯示:
    • 該分類相關網頁的清單(顯示頁面的標題,並連接到該頁面的URL),同時顯示分類名,訪問數量,喜歡數量;
    • 能夠查找其餘能夠連接到該分類的頁面的搜索功能(經過Bing's Search API)
  • 對於特定的分類,客戶但願:記錄該分類名稱;每一個分類頁面被訪問的次數;還有點擊了「喜歡」按鈕的用戶數量。
  • 只有註冊用戶才能搜索和增長分類下的頁面。網站的訪客能夠註冊帳戶。

乍一看,這個要開發的應用至關簡單。基本上只是一個連接到相關頁面的分類列表。然而,其實有至關多的複雜問題和挑戰等着咱們去解決。首先,讓咱們試着經過概要設計來描繪一下將要開發的應用。

練習題

在繼續往下看以前,想一想那些說明,描繪下面這些設計圖。

  • 一份N層結構或系統架構圖
  • 主頁和分類頁面的線框圖
  • 一系列應用的URL映射
  • 一份描述將要使用的數據庫模型的實體-關係(ER)圖

試着在把這些作出來-即便你對系統架構圖、線框圖、實體-關係圖並不熟悉,也試着解釋和描述一下你接下來要建立的東西。

N層結構圖

大部分web應用的高層架構都是3層的。Rango接合了一些外部服務,因此在3層架構的基礎上有些變化。


​ Rango應用的3層系統架構概覽

因爲使用Django建立web應用,咱們將在這些層中使用如下技術:

  • Client客戶端將是渲染HTML/CSS頁面的web瀏覽器(好比Chrome, Firefox, Safari等)。
  • middleware中間件將是一個Django應用程序,咱們開發時將經過Django內建的開發服務器來發送它。
  • database數據庫將使用基於Python的SQLite3數據庫引擎。
  • search API 搜索程序界面將使用Bing search API.

這本書的大部份內容聚焦於開發該中間件。經過系統架構圖咱們就能明顯的看出它須要與全部其餘部件結合。

線框圖

對於向客戶展現一個應用程序完成時應該是什麼樣子,線框圖是一個很好的方法。它們能節省不少時間,從手繪到實體模型,無論你有什麼樣的條件均可以製做。對於咱們的Rango應用程序,咱們但願將主頁作成下面這樣。咱們的分類頁面也在下面展現了。


​ 主頁


​ 分類頁面

頁面和URL映射

從上面的說明中,咱們已經定義了兩個將呈現給用戶的頁面。咱們須要描述URL映射來訪問這些頁面。URL映射至關於用戶訪問頁面時在瀏覽器地址欄輸入的文本。Rango的一些基本URL映射以下所示:

  • /or/rango/將指向/index主頁面
  • /rango/about/將指向關於頁面。
  • /rango/category/ /將指向該分類名 表示的分類頁面。這些分類可能有:
    • games;
    • python-recipes;
    • code-and-compilers.

當咱們建立應用程序時,將會建立一些其餘的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(不一致的製表符錯誤)。

大部分代碼編輯器都會顯示空白區域,而且顯示它是製表符仍是空格。若是你的編輯器也有這個功能,請讓它保持開啓,能夠避免不少困擾。

相關文章
相關標籤/搜索