<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                本書所講的是Django:一個可以使Web開發工作愉快并且高效的Web開發框架。 使用Django,使你能夠以最小的代價構建和維護高質量的Web應用。 從好的方面來看,Web 開發激動人心且富于創造性;從另一面來看,它卻是份繁瑣而令人生厭的工作。 通過減少重復的代碼,Django 使你能夠專注于 Web 應用上有 趣的關鍵性的東西。 為了達到這個目標,Django 提供了通用Web開發模式的高度抽象,提供了頻繁進行的編程作業的快速解決方法,以及為“如何解決問題”提供了清晰明了的約定。 同時,Django 嘗試留下一些方法,來讓你根據需要在framework之外來開發。 本書的目的是將你培養成Django專家。 主要側重于兩方面: 第一,我們深度解釋 Django 到底做了哪些工作以及如何用她構建Web應用;第二,我們將會在適當的地方討論更高級的概念,并解釋如何 在自己的項目中高效的使用這些工具。 通過閱讀此書,你將學會快速開發功能強大網站的技巧,并且你的代碼將會十分 清晰,易于維護。 本書的代碼清晰,易維護,通過學習,可以快速開發功能強大的網站。 ## 框架是什麼? Django 在新一代的?_Web框架_?中非常出色,為什么這么說呢? 為回答該問題,讓我們考慮一下_不使用_框架設計 Python 網頁應用程序的情形。 貫穿整本書,我們多次展示不使用框架實現網站基本功能的方法,讓讀者認識到框架開發的方便。 (不使用框架,更多情況是沒有合適的框架可用。 最重要的是,理解實現的來龍去脈會使你成為一個優秀的web開發者。) 使用Python開發Web,最簡單,原始和直接的辦法是使用CGI標準,在1998年這種方式很流行。 現在從應用角度解釋它是如何工作: 首先做一個Python腳本,輸出HTML代碼,然后保存成.cgi擴展名的文件,通過瀏覽器訪問此文件。 就是這樣。 如下示例,用Python CGI腳本顯示數據庫中最新出版的10本書: 不用關心語法細節;僅僅感覺一下基本實現的方法: ~~~ #!/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.connect(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[0] print "</ul>" print "</body></html>" connection.close() ~~~ 首先,用戶請求CGI,腳本代碼打印Content-Type行,后面跟著換行。 再接下 來是一些HTML的起始標簽,然后連接數據庫并執行一些查詢操作,獲取最新的十本書。 在遍歷這些書的同時,生成一個書名的HTML列表項。 最后,輸出HTML的結束標簽并且關閉數據庫連接。 像這樣的一次性的動態頁面,從頭寫起的方法并非一定不好。 其中一點: 這些代碼簡單易懂,就算是一個初起步的 開發者都能讀明白這16行的Python的代碼,而且這些代碼從頭到尾做了什么都能了解得一清二楚。 不需要學習額外 的背景知識,沒有額外的代碼需要去了解。 同樣,也易于部署這16行代碼,只需要將它保存為一個latestbooks.cgi?的 文件,上傳到網絡服務器上,通過瀏覽器訪問即可。 盡管實現很簡單,還是暴露了一些問題和不便的地方。 問你自己這幾個問題: * 應用中有多處需要連接數據庫會怎樣呢? 每個獨立的CGI腳本,不應該重復寫數據庫連接的代碼。 比較實用的辦法是寫一個共享函數,可被多個代碼調用。 * 一個開發人員?_確實_?需要去關注如何輸出Content-Type以及完成所有操作后去關閉數據 庫么? 此類問題只會降低開發人員的工作效率,增加犯錯誤的幾率。 那些初始化和釋放 相關的工作應該交給一些通用的框架來完成。 * 如果這樣的代碼被重用到一個復合的環境中會發生什么? 每個頁面都分別對應獨立的數據庫和密碼嗎? * 如果一個Web設計師,完全沒有Python開發經驗,但是又需要重新設計頁面的話,又將 發生什么呢? 一個字符寫錯了,可能導致整個應用崩潰。 理想的情況是,頁面顯示的邏輯與從數據庫中讀取書本記錄分隔開,這樣 Web設計師的重新設計不會影響到之前的業務邏輯。 以上正是Web框架致力于解決的問題。 Web框架為應用程序提供了一套程序框架, 這樣你可以專注于編寫清晰、易維護的代碼,而無需從頭做起。 簡單來說,這就是Django所能做的。 ## MVC 設計模式 讓我們來研究一個簡單的例子,通過該實例,你可以分辨出,通過Web框架來實現的功能與之前的方式有何不同。 下面就是通過使用Django來完成以上功能的例子: 首先,我們分成4個Python的文件,(models.py?,views.py?,?urls.py?) 和html模板文件 (latest_books.html?) ~~~ # models.py (the database 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 = patterns('', (r'^latest/$', views.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/](http://example.com/latest/)將會調用latest_books()這個函數。 * latest_books.html?是 html 模板,它描述了這個頁面的設計是如何的。 使用帶基本邏輯聲明的模板語言,如`{%?for?book?in?book_list?%}` 結合起來,這些部分松散遵循的模式稱為模型-視圖-控制器(MVC)。 簡單的說, MVC 是一種軟件開發的方法,它把代碼的定義和數據訪問的方法(模型)與請求邏輯 (控制器)還有用戶接口(視圖)分開來。 我們將在第5章更深入地討論MVC。 這種設計模式關鍵的優勢在于各種組件都是?_松散結合_?的。這樣,每個由 Django驅動 的Web應用都有著明確的目的,并且可獨立更改而不影響到其它的部分。 比如,開發者 更改一個應用程序中的 URL 而不用影響到這個程序底層的實現。 設計師可以改變 HTML 頁面 的樣式而不用接觸 Python 代碼。 數據庫管理員可以重新命名數據表并且只需更改一個地方,無需從一大堆文件中進行查找和替換。 本書中,每個組件都有它自己的一個章節。 比如,第三章涵蓋了視圖,第四章是模板, 而第五章是模型。 ## Django 歷史 在我們討論代碼之前我們需要先了解一下 Django 的歷史。 從上面我們注意到:我們將向你展示如何不使用捷徑來完成工作,以便能更好的理解捷徑的原理 同樣,理解Django產生的背景,歷史有助于理解Django的實現方式。 如果你曾編寫過網絡應用程序。 那么你很有可能熟悉之前我們的 CGI 例子。 1. 從頭開始編寫網絡應用程序。 2. 從頭編寫另一個網絡應用程序。 3. 從第一步中總結(找出其中通用的代碼),并運用在第二步中。 4. 重構代碼使得能在第 2 個程序中使用第 1 個程序中的通用代碼。 5. 重復 2-4 步驟若干次。 6. 意識到你發明了一個框架。 這正是為什么 Django 建立的原因! Django 是從真實世界的應用中成長起來的,它是由 堪薩斯(Kansas)州 Lawrence 城中的一個 網絡開發小組編寫的。 它誕生于 2003 年秋天,那時?_Lawrence Journal-World_?報紙的 程序員 Adrian Holovaty 和 Simon Willison 開始用 Python 來編寫程序。 當時他們的 World Online 小組制作并維護當地的幾個新聞站點, 并在以新聞界特有的快節奏開發環境中逐漸發展。 這些站點包括有 LJWorld.com、Lawrence.com 和 KUsports.com, 記者(或管理層) 要求增加的特征或整個程序都能在計劃時間內快速的被建立,這些時間通常只有幾天 或幾個小時。 因此,Adrian 和 Simon 開發了一種節省時間的網絡程序開發框架, 這是在截止時間前能完成程序的唯一途徑。 2005 年的夏天,當這個框架開發完成時,它已經用來制作了很多個 World Online 的站點。 當時 World Online 小組中的 Jacob Kaplan-Moss 決定把這個框架發布為一個開源軟件。 從今往后數年,Django是一個有著數以萬計的用戶和貢獻者,在世界廣泛傳播的完善開源項目。 原來的World Online的兩個開發者(Adrian and Jacob)仍然掌握著Django,但是其發展方向受社區團隊的影響更大。 這些歷史都是相關聯的,因為她們幫助解釋了很重要的兩點。 第一,Django最可愛的地方。 Django誕生于新聞網站的環境中,因此它提供很多了特性(如第6章會說到的管理后臺),非常適合內容類的網站,如Amazon.com, craigslist.org和washingtonpost.com,這些網站提供動態的,數據庫驅動的信息。 (不要看到這就感到沮喪,盡管Django擅長于動態內容管理系統, 但并不表示Django主要的目的就是用來創建動態內容的網站。 某些方面 * 特別高效* 與其他方面 * 不高效* 是有區別的, Django在其他方面也同樣高效。) 第二,Django的起源造就了它的開源社區的文化。 因為Django來自于真實世界中的代碼,而不是 來自于一個科研項目或者商業產品,她主要集中力量來解決Web開發中遇到的問題,同樣 也是Django的開發者經常遇到的問題。 這樣,Django每天在現有的基礎上進步。 框架的開發者對于讓開發人員節省時間,編寫更加容易維護的程序,同時保證程序運行的效率具有極大的興趣。 無他,開發者動力來源于自己的目標:節省時間,快樂工作。 (坦率地講,他們使用了自己公司的產品。) ## 如何閱讀本書 在編寫本書時,我們努力嘗試在可讀性和參考性間做一個平衡,當然本書會偏向于可 讀性。 本書的目標,之前也提過,是要將你培養成一名Django專家,我們相信,最好 的方式就是提供文章和充足的實例,而不是一堆詳盡卻乏味的關于Django特色的手冊。 (曾經有人說過,如果僅僅教字母表是無法教會別人說話的。 按照這種思路,我們推薦按順序閱讀第 1-12 章。 這些章節構成了如何使用 Django 的基礎;讀過之后,你就可以搭建由 Django 支撐的網站了。 1-7章是核心課程,8-11章講述Django的高級應用,12章講述部署相關的知識。 剩下的13-20章,講述Django特有的特點,可以任意順序閱讀。 附錄部分用作參考資料。 要回憶語法或查閱 Django 某部分的功能概要時,你偶爾可能會回來翻翻這些資料以及?[http://www.djangoproject.com/](http://www.djangoproject.com/)?上的免費文檔。 ### 所需編程知識 本書讀者需要理解基本的面向過程和面向對象編程: 流程控制(?if?,?while?和?for?),數據結構(列表,哈希表/字典),變量,類和對象。 Web開發經驗,正如你所想的,也是非常有幫助的,但是對于閱讀本書,并不是必須的。 通過本書,我們盡量給缺乏經驗的開發人員提供在Web開發中最好的實踐。 ### Python所需知識 本質上來說, Django 只不過是用 Python 編寫的一組類庫。 用 Django 開發站點就是使用這些類庫編寫 Python 代碼。 因此,學習 Django 的關鍵就是學習如何進行 Python 編程并理解 Django 類庫的運作方式。 如果你有Python開發經驗,在學習過程中應該不會有任何問題。 基本上,Django的代碼并 沒有使用一些黑色魔法(例如代碼中的花哨技巧,某個實現解釋或者理解起來十分困難)。 對你來說,學習Django就是學習她的命名規則和API。 如果你沒有使用 Python 編程的經驗,你一定會學到很多東西。 它是非常易學易用的。 雖然這本書沒有包括一個完整的 Python 教程, 但也算是一個恰當的介紹了 Python特征和 功能的集錦。 當然,我們推薦你讀一下官方的 Python 教程,它可 以從?[http://docs.python.org/tut/](http://docs.python.org/tut/)?在線獲得。 另外我們也推薦 Mark Pilgrims的 書_Dive Into Python_?(?[http://www.diveintopython.org/](http://www.diveintopython.org/)?) ### Django版本支持 此書內容對Django 1.1兼容。 Django的開發者保證主要版本號向后兼容。 這意味著,你用Django 1.1寫的應用,可以用于1.2,1.3,1.9等所有以1開頭的版本 如果Django到了2.0,你的應用可能不再兼容,需要重寫,但是,2.0是很遙遠的事情。 對此,可以參考一下1.0的開發周期,整整3年的時間。 (這與Python語言的兼容策略非常像: 在python 2.0下寫的代碼可以在python 2.6下運行,但不一定能在python3.0下運行 所以,此書覆蓋1.1版本,可以使用很長時間。 ### 獲取幫助 Django的最大的益處是,有一群樂于助人的人在Django社區上。 你可以毫無約束的提各種 問題在上面,如:django的安裝,app 設計,db 設計,發布。 * Django郵件列表是很多Django用戶提出問題、回答問題的地方。 可以通過[http://www.djangoproject.com/r/django-users](http://www.djangoproject.com/r/django-users)?來免費注冊。 * 如果Django用戶遇到棘手的問題,希望得到及時地回復,可以使用Django IRC channel。 在Freenode IRC network加入#django
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看