Django:一個可使web開發工做愉快而且高效的web框架。html
Django提供了經過web開發模式的高度抽象,經過這次學習,明白兩個方面:第一,深度解釋Django到底做了哪些工做以及如何用Django構建web應用;第二,在適當地方討論更高級的概念,並解釋如何在本身的項目中高效使用這些工具。經過學習,學會快速開發功能強大網站的技巧,而且代碼清晰,易於維護。python
首先,框架是什麼?web
若是不使用框架,python開發web,最簡單,原始和直接的辦法就是使用CGI標準,這種方法是這麼工做的:首先作一個python腳本,輸出html代碼,而後保存成.cgi擴展名的文件,經過瀏覽器訪問文件。數據庫
好比,用python cgi腳本顯示數據庫中最新出版的10本書:django
#! /usr/bin/env python import MySQLdb print "Content-Type:text/html/\n" print "<html><head><title>Books</title></head>" print "<body>" print "<h1>Books</h1>" print "<ul>" Connection = MySQLdb.connection(user= 'me',passwd='letmein',db='my_db') cursor = connection.cursor() cursor.execute("SELECT name FROM books ORDER BY pub_date DESC LIMIT 10") for row in cursor.fetchall(): print "<li>%s</li>"%row[10] print "</ul>" print "</body></html>" connection.close()
首先,用戶請求cgi,腳本代碼打印Content-Type行,後面跟着換行。再接下來是一些html的起始標籤,而後鏈接數據庫並執行一些查詢操做,獲取最新的十本書。在便利這些書的同時,生成一個書名的html列表項,最後輸出html結束標籤並關閉數據庫鏈接。 設計模式
儘管實現簡單,仍是有些問題和不便的地方。瀏覽器
--應用中有多處須要鏈接數據庫會怎樣?每一個獨立的cgi腳本不該該重複寫數據庫鏈接的代碼,比較實用的辦法是寫一個共享函數,能夠被多個代碼調用。框架
--初始化和釋放相關的工做應該交給通用的框架來完成函數
--若是代碼被重用到一個符合的環境中,每一個頁面對應獨立的數據庫和密碼麼?工具
--若是web設計師,徹底沒有python開發經驗,可是有須要從新設計頁面的話,又將發生什麼呢?一個字符寫錯了,可能致使整個應用崩潰。理想的狀況,頁面顯示的邏輯從數據庫中讀取書本記錄分隔開來,這樣web設計師從新設計不會 影響到以前的業務邏輯。
Django的MVC設計模式
Django哦你改過3個python文件和html模板文件來完成以上功能。
分別是models.py ,views.py ,urls.py和latest_books.html
#models.py (the datebase tables) from django.db import models class Book(models.Model): name = models.CharField(max_length=50) pub_date=models.DateField() #views.py (the business logic) from django.shortcuts import render_to_response from models import Book def latest_books(request): book_list=Book.objects.order_by('-pub_date')[:10] return render_to_response('latest_books.html',{'book_list':book_list}) #urls.py (the URL configuration) from django.conf.urls.defaults import * import views urlpatterns=pattern(''.(r'^latest/$',view.latest_books),) #latest_books.html (the template) <html><head><title>Books</title></head> <body> <h1>Books</h1> <ul> {% for book in book_list %} <li> {{book.name}}</li> {% endfor %} </ul> </body></html>
不用關心語法細節;秩序關注分隔後的幾個文件:
--models.py 主要用一個python類來描述數據表,成爲模型(model)。運用這個類,能夠經過簡單的python代碼來建立、檢索、更新、刪除數據庫中的記錄而無需寫一條又一條SQL語句。
--views.py文件包含了頁面的業務邏輯。latest_books()函數叫作視圖。
--urls.py指出了什麼樣的URL調用什麼的視圖,/latest/URL將會調用latest_books()這個函數,換句話說,若是域名是example.com,那麼瀏覽網址http://example.com/latest/將會調用latest_books()這個函數
--latest_books.html是html模板,描述了這個頁面是如何設計的,使用帶基本邏輯聲明的模板語言,如{% for book in book_list %}。
結合起來,這種模式成爲模型-視圖-控制器(MVC),簡單說,MVC是一種軟件開發的方法,把代碼的定義和數據訪問的方法(模型)與請求邏輯(控制器)還有用戶接口(視圖)分開來。