Django:一款可以節約你的時間而且讓開發樂趣橫生的 web 開發框架。使用Django,花極少時間便可構建和維護質量上乘的 Web 應用。經過減小重複的代碼,Django 使你可以專一於 web 應用上有 趣的關鍵性的東西。爲了達到這個目標,Django 提供了通用 Web 開發模式的高度抽象,提供了頻繁進行的編程做業的快速解決方法,以及爲「如何解決問題」提供了清晰明瞭的約定。同時,Django 嘗試留下一些方法,來讓你根據須要在 framework 以外來開發。html
以上正是 Web 框架致力於解決的問題。Web 框架爲應用程序提供了一套程序框架, 這樣你能夠專一於編寫清晰、易維護的代碼,而無需從頭作起。簡單來講,這就是 Django 所能作的。
python
MVC,全名是Model View Controller,是軟件工程中的一種軟件架構模式,把軟件系統分爲三個基本部分:模型(Model)、視圖(View)和控制器(Controller),具備耦合性低、重用性高、生命週期成本低等優勢。程序員
讓咱們來研究一個簡單的例子,經過該實例,你能夠分辨出,經過 Web 框架來實現的功能與以前的方式有何不一樣。下面就是經過使用 Django 來完成以上功能的例子:web
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>
models.py 文件主要用一個 Python 類來描述數據表。稱爲 模型(model) 。 運用這
個類,你能夠經過簡單的 Python 的代碼來建立、檢索、更新、刪除 數據庫中的記錄
而無需寫一條又一條的 SQL 語句。數據庫
urls.py 指出了什麼樣的 URL 調用什麼的視圖,在這個例子中 /latest/ URL 將會調用 latest_books() 這個函數django
latest_books.html 是 html 模板,它描述了這個頁面的設計是如何的。 編程
這些部分鬆散的組合在一塊兒就是模型-視圖-控制器(MVC)的設計模式。簡單的說, MVC 是一種軟件開發的方法,它把代碼的定義和數據訪問的方法(模型)與請求邏輯 (控制器)還有用戶接口(視圖)分開來。設計模式
這種設計模式關鍵的優點在於各類組件都是 鬆散結合的。這樣,每一個由 Django 驅動 的 Web應用都有着明確的目的,而且可獨立更改而不影響到其它的部分。好比,開發者 更改一個應用程序中的 URL 而不用影響到這個程序底層的實現。設計師能夠改變 HTML 頁面 的樣式而不用接觸 Python 代碼。數據庫管理員能夠從新命名數據表而且只需更改一個地方,無需從一大堆文件中進行查找和替換。瀏覽器
在Django的使用過程當中須要使用命令讓Django進行一些操做,例如建立Django項目、啓動Django程序、建立新的APP、數據庫遷移等。服務器
一把咱們都新建一個文件夾來存放項目文件,切換到這個目錄下,啓動命令行工具。建立一個名爲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 所支撐站點的內容列表
啓動項目的時候,須要切換到mysite目錄下,執行以下命令:
python manage.py runserver #默認使用8000端口
命令後面還能夠指定參數:
python manage.py runserver 8888 #8888爲新指定的端口
python manage.py runserver 127.0.0.1:8000 #還能夠指定IP和端口,冒號分割
一個Django項目能夠分爲不少個APP,用來隔離不一樣功能模塊的代碼。
python manage.py startapp app01
執行命令後,項目目錄下多出一個app01的文件夾,目錄結構以下:
app01/ migrations __init__.py __init__.py admin.py apps.py models.py tests.py views.py
可使用PyCharm的manage.py工具來執行命名。在主菜單欄中選擇Tools,在下拉菜單中選擇Run manage.py task,會出現以下圖所示的工具對話框:
在彈出的命令窗口中直接輸入下面的命令即可建立app:
startapp app01
使用PyCharm的manage.py工具執行命令時,只用輸入命令及參數便可,再也不輸入python manage.py了。
python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser
python manage.py runserver 8080
python manage.py runserver 0.0.0.0:8080 //會讓 Django 監聽全部網絡接口,所以也就讓其它電腦可鏈接到開發服務器了。
Django 請求迴應流程
5.最後, response middleware 作發送 HttpResponse 給瀏覽器以前的後處理或者清除 請求用到的相關資源。
鬆耦合原則。簡單的說,鬆耦合是一個 重要的保證互換性的軟件開發方法。若是兩段代碼是鬆耦合的,那麼改動其中一段代碼不會 影響另外一段代碼,或者只有不多的一點影響。
Django 的 URL 配置就是一個很好的例子。在 Django 的應用程序中,URL 的定義和視圖函數之間是鬆 耦合的,換句話說,決定 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,而儘可能不要考慮它的 反面 。