初識Django

Django 簡介

  Django:一款可以節約你的時間而且讓開發樂趣橫生的 web 開發框架。使用Django,花極少時間便可構建和維護質量上乘的 Web 應用。經過減小重複的代碼,Django 使你可以專一於 web 應用上有 趣的關鍵性的東西。爲了達到這個目標,Django 提供了通用 Web 開發模式的高度抽象,提供了頻繁進行的編程做業的快速解決方法,以及爲「如何解決問題」提供了清晰明瞭的約定。同時,Django 嘗試留下一些方法,來讓你根據須要在 framework 以外來開發。html

 

一 什麼是web框架

  1. 當多個動態頁面須要同時鏈接數據庫時,將會發生什麼?固然,鏈接數據庫的代碼不該該同時存在於各個獨立的 CGI 腳本中,因此最踏實的作法是把這些代碼從新組織到一個公共函數裏面。
  2. 一個開發人員 確實 須要去關注如何輸出 Content-Type 以及完成全部操做後去關閉數據 庫麼?此類問題只會下降開發人員的工做效率,增長犯錯誤的概率。那些初始化和釋放 相關的工做應該交給一些通用的框架來完成。
  3. 若是這樣的代碼被重用到一個複合的環境中會發生什麼?每一個頁面都分別對應獨立的數據庫和密碼嗎?從這點看來,就須要一些環境相關的配置文件。
  4.  若是一個 Web 設計師,徹底沒有 Python 開發經驗,可是又須要從新設計頁面的話,又將 發生什麼呢?理想的狀況是,頁面顯示的邏輯與從數據庫中讀取書本記錄分隔開,這樣 Web 設計師的從新設計不會影響到以前的業務邏輯

  以上正是 Web 框架致力於解決的問題。Web 框架爲應用程序提供了一套程序框架, 這樣你能夠專一於編寫清晰、易維護的代碼,而無需從頭作起。簡單來講,這就是 Django 所能作的。

python

二 MVC設計模式

  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>
View Code
  • models.py 文件主要用一個 Python 類來描述數據表。稱爲 模型(model) 。 運用這
    個類,你能夠經過簡單的 Python 的代碼來建立、檢索、更新、刪除 數據庫中的記錄
    而無需寫一條又一條的 SQL 語句。數據庫

  • view.py 文件的 latest_books() 函數中包含了該頁的業務層邏輯。這個函數叫作 視圖(view) 。
  • urls.py 指出了什麼樣的 URL 調用什麼的視圖,在這個例子中 /latest/ URL 將會調用 latest_books() 這個函數django

  • latest_books.html 是 html 模板,它描述了這個頁面的設計是如何的。  編程

  這些部分鬆散的組合在一塊兒就是模型-視圖-控制器(MVC)的設計模式。簡單的說, MVC 是一種軟件開發的方法,它把代碼的定義和數據訪問的方法(模型)與請求邏輯 (控制器)還有用戶接口(視圖)分開來。設計模式

  這種設計模式關鍵的優點在於各類組件都是 鬆散結合的。這樣,每一個由 Django 驅動 的 Web應用都有着明確的目的,而且可獨立更改而不影響到其它的部分。好比,開發者 更改一個應用程序中的 URL 而不用影響到這個程序底層的實現。設計師能夠改變 HTML 頁面 的樣式而不用接觸 Python 代碼。數據庫管理員能夠從新命名數據表而且只需更改一個地方,無需從一大堆文件中進行查找和替換。瀏覽器

 

三 Django常見命令

  在Django的使用過程當中須要使用命令讓Django進行一些操做,例如建立Django項目、啓動Django程序、建立新的APP、數據庫遷移等。服務器

1建立Django項目

  一把咱們都新建一個文件夾來存放項目文件,切換到這個目錄下,啓動命令行工具。建立一個名爲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 所支撐站點的內容列表

2啓動Django項目

 啓動項目的時候,須要切換到mysite目錄下,執行以下命令:

python manage.py runserver  #默認使用8000端口

 命令後面還能夠指定參數:

python manage.py runserver 8888  #8888爲新指定的端口
python manage.py runserver 127.0.0.1:8000  #還能夠指定IP和端口,冒號分割

3建立APP

一個Django項目能夠分爲不少個APP,用來隔離不一樣功能模塊的代碼。

(1)命令行建立

python manage.py startapp app01

執行命令後,項目目錄下多出一個app01的文件夾,目錄結構以下:

app01/
    migrations
        __init__.py
    __init__.py
    admin.py
    apps.py
    models.py
    tests.py
    views.py

(2)使用PyCharm建立

可使用PyCharm的manage.py工具來執行命名。在主菜單欄中選擇Tools,在下拉菜單中選擇Run manage.py task,會出現以下圖所示的工具對話框:

在彈出的命令窗口中直接輸入下面的命令即可建立app:

startapp app01

使用PyCharm的manage.py工具執行命令時,只用輸入命令及參數便可,再也不輸入python manage.py了。

4數據庫遷移

python manage.py makemigrations
python manage.py migrate

5建立超級用戶

python manage.py createsuperuser

6 更改主機或端口

python manage.py runserver 8080
python manage.py runserver 0.0.0.0:8080 //會讓 Django 監聽全部網絡接口,所以也就讓其它電腦可鏈接到開發服務器了。

 

四 Django 是如何處理請求的

  

  Django 請求迴應流程

 

  1. 當服務器收到一個 HTTP 請求之後,一個服務器特定的 handler 會建立 HttpRequest 並傳遞給下一個組件並處理。
  2. 這個 handler 而後調用全部可用的 Request 或者 View 中間件。這些類型的中間件一般是用來 加強 HttpRequest 對象來對一些特別類型的 request 作些別處理。只要其中有一個 返回 HttpResponse ,系統就跳過對視圖的處理。
  3. 即使是最棒的程序員也會有出錯的時候, 這個時候 異常處理中間件( exception middleware ) 能夠幫你的大忙。若是一個視圖函數拋出異常,控制器會傳遞給異常處理中間件處理。若是這個 中間件沒有返回HttpResponse ,意味着它不能處理這個異常,這個異常將會再次拋出。
  4. 即使是這樣,你也不用擔憂。Django 包含缺省的視圖來生成友好的 404 和 500 迴應(response)。

   5.最後, response middleware 作發送 HttpResponse 給瀏覽器以前的後處理或者清除 請求用到的相關資源。

五 其餘補充 

 1 Django 和 URL 配置背後的哲學:

  鬆耦合原則。簡單的說,鬆耦合是一個 重要的保證互換性的軟件開發方法。若是兩段代碼是鬆耦合的,那麼改動其中一段代碼不會 影響另外一段代碼,或者只有不多的一點影響。

  Django 的 URL 配置就是一個很好的例子。在 Django 的應用程序中,URL 的定義和視圖函數之間是鬆 耦合的,換句話說,決定 URL 返回哪一個視圖函數和實現這個視圖函數是在兩個不一樣的地方。這使得 開發人員能夠修改一塊而不會影響另外一塊。

2 404 錯誤

  Page not found」頁面只會在 調試模式(debug mode)下顯示

3關於漂亮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,而儘可能不要考慮它的 反面 。

相關文章
相關標籤/搜索