亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Python的Django框架使用入門指引

系統 1519 0

?前言

傳統 Web 開發方式常常需要編寫繁瑣乏味的重復性代碼,不僅頁面表現與邏輯實現的代碼混雜在一起,而且代碼編寫效率不高。對于開發者來說,選擇一個功能強大并且操作簡潔的開發框架來輔助完成繁雜的編碼工作,將會對開發效率的提升起到很大幫助。幸運的是,這樣的開發框架并不少見,需要做的僅是從中選出恰恰為開發者量身打造的那款Web框架。

自從基于 MVC 分層結構的 Web 設計理念普及以來,選擇適合的開發框架無疑是項目成功的關鍵性因素。無論是 Struts、Spring 或是其他 Web 框架的出現,目的都是為幫助開發者把所有的編碼工作打理的井井有條、賞心悅目。在動態語言領域,Python、Ruby、Groovy 等語言在 Web 開發中也逐漸發展壯大,掀起一浪接一浪的開發熱潮。面對 Ruby on Rails 漸漸深入人心的宣傳攻勢和火熱勢頭,更為成熟且不乏優秀程序員的Python 社區也紛紛推出欲與之抗衡的Web開發框架。在對 Python 旗下的開發框架經過一番取舍比較之后,筆者選擇了 Python 框架 Django 作為 Web 開發框架的首選,究其緣由,就是看中了 Django 新穎簡潔的開發模式和巨大的發展潛力。

在下面的章節里,將通過一個完整的 Django 框架 Web 開發示例,詳細講解開發過程中 MVC 各層次代碼編寫過程中所需的各種要素與資源,通過實例體驗 Django 為 Web開發者帶來的高效與便捷。

細說Django

Django 是應用于 Web 開發的高級動態語言框架,最初起源于美國芝加哥的 Python 用戶組,具有新聞從業背景的 Adrian Holovaty 是 Django 框架的主要開發者。在 Adrian 的帶領下,Django 小組致力于為 Web 開發者貢獻一款高效完美的Python 開發框架,并且在 BSD 開放源代碼協議許可下授權給開發者自由使用。

Django 擁有完善的模板機制、對象關系映射機制以及用于動態創建后臺管理界面的功能,利用 Django,可以快速設計和開發具有 MVC 層次的 Web 應用。為了打消開發者選用 Django 框架時的疑慮,首先分析一下 Django 引人注目的特性。在實體映射方面,Django 的對象相關映射機制幫助開發者在 Python 類中靈活定義數據模型,并且Django 具有功能豐富的動態數據庫訪問 API,可以大幅度簡化書寫 SQL 語句的繁雜工作。同時 Django 支持包括 Postgresql,MySql,Sqlite,Oracle 在內的多種后臺數據庫。Django 的 URL 分發設計的十分簡潔美觀,不會在鏈接中產生一大串雜亂且難以理解的字符。使用 Django 可擴展的內置模板,可以將模型層、控制層與頁面模板完全獨立開來進行編碼。Django 還具有自己的 Cache 系統,如果需要,也可以根據開發者的要求嵌套其他的 Cache 框架。


起程前的準備

即使是對 Python 語言還不太熟悉,Django 開發的起步過程對于新手來說也并不復雜,通過使用 Django 框架完成下面的 Web 應用開發,可以在過程的每個步驟之中體會到 Django 框架賦予開發者的敏捷與自由。

在開始之前,首先要配置好Python和Django的開發環境,下面的示例將在Windows操作系統下進行,與Linux/Unix操作系統環境下的開發過程相比,僅在環境變量配置等方面略有不同。目前Python的最新版本是2.5.1,在官方站點Python.org下載安裝包后搭建好Python的編譯運行環境,接下來還需要把Python的安裝路徑添加在系統環境變量path里面,以便在命令行下使用Python進行編譯及運行。

Django目前的最新發行版本是0.96版,其壓縮包可以在官方站點djangoproject.com下載。解壓后進入Django目錄,在命令行里執行python setup.py install,這樣Django就會作為第三方模塊被安裝在Python的site-packages目錄中,然后把Django中bin目錄的路徑添加到環境變量path里面,這樣在命令行里就可以方便的使用Django提供的各種指令。


開始Django的旅程

在下面的步驟里,將會利用Django框架實現一個完整小巧的Web應用程序。應用實例將創建實現一個新聞公告牌,用戶可以從后臺添加新聞分類和條目,然后在前端頁面中顯示新聞的統計信息。在應用的實現過程中,將會逐步介紹Django的開發方式及其帶來的快捷體驗。

為幫助開發者實現不同的功能,Django為我們提供了眾多的開發指令,大部分繁瑣的操作都被Django集成在簡潔的命令行提示符中實現。現在打開命令提示符,進入到想要創建應用的目錄后鍵入django-admin.py startproject news命令,調用Django的控制臺命令新建一個名為news的工程,與此同時Django還在新創建的news文件夾下生成以下四個分工不同的文件。

??? 1. __init__.py
??? 文件__init__.py可以向Python編譯器表明當前文件夾下的內容是Python工程模塊。
??? 2.manage.py
??? manage.py是Python腳本文件,與Django的命令行工具django-admin.py配合,可以對建立的工程進行管理配置。
??? 3.settings.py
??? 這是Django工程的配置文件,與工程相關的工程模塊和數據庫全局配置信息都在settings.py中設置。
??? 4.urls.py
??? 文件urls.py負責配置URL的地址映射以及管理URL的地址格式。

當新的工程建立好之后,假如迫不及待就想知道新建工程的模樣,Django已經為你準備好一款輕量級的Web服務器以便在開發過程中隨時測試使用。開發者只需在命令提示符下進入工程目錄,鍵入命令manage.py runserver,就可以啟動Web服務器來測試新建立的工程,如果啟動沒有錯誤,將可以看到下面這樣的提示信息:“Development server is running at http://127.0.0.1:8000/” 表示當前工程已經可以通過本機的8000端口訪問。通過瀏覽器打開上述地址,如圖1所示的Django項目初始頁面將會出現在讀者面前。
圖 1. Django項目初始頁面

Python的Django框架使用入門指引_第1張圖片

在命令行里使用Ctrl+Break或Ctrl+C的組合鍵可以停止runserver命令啟動的Web服務器。當然,Django自帶的Web服務器一般只是在開發測試的過程中使用,當Django工程真正發布時,可以通過加載mod_python.so模塊把Django應用部署在Apache上,以方便Web訪問的管理和配置。


Django的模型定義

在工程建立好之后,接下來就可以編寫Django的應用模塊。鍵入命令python manage.py startapp article,命令會在當前工程下生成一個名為article的模塊,目錄下除了標識Python模塊的__init__.py文件,還有額外的兩個文件models.py和views.py。

在傳統的Web的開發中,很大的一部分工作量被消耗在數據庫中創建需要的數據表和設置表字段上,而Django為此提供了輕量級的解決方案。借助Django內部的對象關系映射機制,可以用Python語言實現對數據庫表中的實體進行操作,實體模型的描述需要在文件models.py中配置。

在當前的工程中,需要有兩個Models模型,分別對應List表和Item表,用來存儲新聞的分類和新聞的條目,每個Item項都會有一個外鍵來標記文章的歸屬分類。下面打開Django創建的models.py文件,按照文件注釋中提示的模塊添加位置,編寫如下的代碼:
清單 1. models.py文件模型定義

            
class List(models.Model): 
 title = models.CharField(maxlength=250, unique=True) 
 def __str__(self): 
  return self.title 
 class Meta: 
  ordering = ['title'] 
 class Admin: 
  pass


          

上面這段Python代碼定義了存儲新聞分類的List數據表,上述模型中的定義會被Django轉換成與數據庫直接交互的結構化查詢語言來建立數據表,即創建一個名為List的表格,表格內的兩個字段分別是Django自動生成的整型主鍵id和最大寬度為250個字符的VARCHAR類型字段title,并且在title字段上定義了唯一性約束,來保證新聞分類不會有完全相同的名稱。

在List類文件里還定義了函數__str__(),作用是返回self字符串表示的title字段。而在類Meta中,設置了List表格按照title字母順序的排序方式。在類Admin的設置中,允許Django針對當前的Models模型自動生成Django超級用戶的后臺管理入口,關鍵詞pass設定Django將按照默認方式生成后臺管理界面。這一部分在稍后的章節可以看到,由此也可以體會到Django帶來的獨特魅力。下面再來添加新聞條目Item對應的Models模型,代碼如下面所示:
清單 2. 添加新聞條目Models模型

            
import datetime 
class Item(models.Model): 
 title = models.CharField(maxlength=250) 
 created_date = models.DateTimeField(default=datetime.datetime.now) 
 completed = models.BooleanField(default=False) 
 article_list = models.ForeignKey(List) 
 def __str__(self): 
  return self.title 
 class Meta: 
  ordering = ['-created_date', 'title'] 
 class Admin: 
  pass


          

Item數據表對應的Models代碼稍微復雜一些,但并不晦澀。代碼里首先引入datetime類型,用于定義表示文章創建日期的created_date字段,并且通過Python的標準函數datetime.datetime.now返回系統當前日期來設置字段的默認值。在記錄排序的ordering設置中,符號“-”表示按照日期的倒序進行排列,如果文章創建日期相同,則再按照title的字母序正序排列。

到此為止,應用中模型部分需要定義的兩個數據表都已經創建完畢,下一步的工作是讓Django部署并在數據庫中生成已經寫好的Models模型。


Django模塊的部署

在Django中,與工程全局相關的設置都需要在配置文件settings.py中添加。筆者使用MySQL作為后臺數據庫,并且已經在MySQL中創建名為django_news的數據庫。則需要在settings.py文件中的相應位置設定DATABASE_ENGINE = "mysql" 以及 DATABASE_NAME = "django_news"。

這里要注意的是,如果使用SQLite數據庫,Django可以根據數據庫的名稱自動在SQLite中創建新的數據庫,而在MySQL、PostgreSQL或其他的數據庫中,則需要先創建與設定名稱對應的數據庫。在使用MySQL數據庫時,需要額外安裝MySQL的Python鏈接庫MySQLdb-1.2.1,這個模塊可以在站點http://sourceforge.net/projects/mysql-python/下載,目前支持的Python版本為2.4,所以使用MySQL數據庫需要在2.4版本的Python環境來開發運行。

接下來的DATABASE_USER和DATABASE_PASSWORD兩項內容則需要用戶根據本機設置填寫訪問數據庫的用戶名和密碼。如果數據庫安裝在其他機器上或者更改了數據庫的監聽端口,則還需要設置DATABASE_HOST地址和DATABASE_PORT項。筆者使用的Mysql數據庫設置為:

            
DATABASE_USER = 'django' 
DATABASE_PASSWORD = 'django_password'


          

為了使Django識別開發者添加的應用模塊,在settings.py文件的INSTALLED_APPS部分中,需要定義Django工程加載的應用列表。默認情況下,列表中已經添加了Django工程運行所需的部分自帶模塊,我們還需要把剛才編寫好的應用模塊news.article加入其中,同時添加Django自帶的django.contrib.admin應用模塊,修改好的代碼如下所示:
清單 3. 添加所需的模塊

            
INSTALLED_APPS = ( 
 'django.contrib.auth', 
 'django.contrib.contenttypes', 
 'django.contrib.sessions', 
 'django.contrib.sites', 
 'django.contrib.admin', 
 'news.article', 
)


          

添加admin模塊后還不能立即使用Django的admin后臺管理界面,需要打開News工程根目錄下的urls.py文件,將“# Uncomment this for admin:”后面的#注釋去掉,使得Django針對管理界面的URL轉向“(r'^admin/', include('django.contrib.admin.urls')),”可用,這樣訪問admin模塊時Django就可以順利解析訪問地址并轉向后臺管理界面。

當配置文件的改動完成之后,就可以在News工程的命令提示符下執行manage.py syncdb指令。Django會根據模型的定義自動完成ORM的數據庫映射工作,屏蔽了底層數據庫細節和SQL查詢的編寫。

展示Django魅力的時刻已經來臨,Django框架將讓開發者開始神奇的體驗。隨著命令執行后的滾動提示,Django已經根據我們剛才在models里定義的映射文件,自動在數據庫里創建好對應的表和字段。命令執行的同時會提示用戶創建“superuser"賬戶,來登陸Django自動創建好的后臺管理界面對模型進行管理。指令執行時同步更新數據庫表的命令提示如圖2所示:
圖 2. Django指令執行時同步更新數據庫表

Python的Django框架使用入門指引_第2張圖片

維持學習動力的最好方式就是隨時都可以找到一點小小的成就感,下面來看一下這些步驟完成了哪些工作。再次使用命令manage.py runserver來啟動Django自帶的Web服務器后,在瀏覽器中訪問地址http://127.0.0.1:8000/admin/,使用剛才創建的superuser用戶的賬號和密碼登陸,如圖3所示漂亮的Django后臺管理界面就出現在眼前。
圖 3. Django根據模型自動生成的后臺管理界面

Python的Django框架使用入門指引_第3張圖片

在admin管理界面中,顯示了應用中已經定義的各個models模塊,當點擊查看時,則會顯示models中存在的數據庫對象列表。Django提供的后臺管理界面方便用戶直接更改或添加數據庫字段,下面我們點擊"Lists"項旁邊的“Add”來添加新的新聞分類。在title字段中鍵入“Sports News”或其他你喜歡的分類后保存。然后在"Items"項中點擊“Add”,填入新聞的第一個條目,每個Item條目都對應List中的一個分類項,添加Item的界面如圖4所示,由于設置了表之間的關聯,Django的Item管理界面中會為已添加List分類自動生成內容的下拉選項。
圖 4. 添加新聞條目的界面

Python的Django框架使用入門指引_第4張圖片

Django便捷的后臺管理界面為Web開發人員節省了大量的時間,目前使用到的只是Django默認的后臺管理方式,開發者還可以參考Django提供的用戶手冊對后臺進行進一步的定制和個性化。


實現Django的控制層和表現層

進行到這里,Django工程中的模型層已經處理完成,下面要做的就是如何用代碼來與models中定義的字段進行交互,這就是Django中的View部分。與傳統MVC分層定義略有不同的是,在Django中,View的功能是對頁面請求進行響應和邏輯控制,而頁面內容的表示則由Django的Template模板來完成。我們可以把Django的View理解為實現各種功能的Python函數,View負責接受URL配置文件urls.py中定義的URL轉發并響應處理,當Django收到請求之后調用相應的View函數來完成功能,article模塊中的views.py文件代碼定義如下:
清單 4. views.py代碼定義

            
from django.shortcuts import render_to_response 
from news.article.models import List 

def news_report(request): 
 article_listing = [] 
 for article_list in List.objects.all(): 
  article_dict = {} 
  article_dict['news_object'] = article_list 
  article_dict['item_count'] = article_list.item_set.count() 
  article_dict['items_title'] = article_list.title
  article_dict['items_complete'] = article_list.item_set.filter(completed=True).count() 
  article_dict['percent_complete'] =
    int(float(article_dict['items_complete']) / article_dict['item_count'] * 100) 
  article_listing.append(article_dict) 
 return render_to_response('news_report.html', { 'article_listing': article_listing })


          

這是一段簡潔的Python代碼,讓我們看看在這段代碼里面Django的函數做了哪些工作吧:

  • ??? List.objects.all方法返回news列表中所有的記錄項,Django可以根據后臺數據庫轉換成相應的SQL語句,在后臺數據庫中執行并返回查詢結果。
  • ??? 每一條article文章都有item_set屬性,代表news新聞條目中的每一個item項。如果需要設置查詢條件,也可以使用item_set.filter方法來返回符合特定要求的item項。
  • ??? render_to_response函數返回瀏覽器指定的HTML頁面,頁面為Django的Template模板,負責展示被請求的頁面內容。

在view部分的代碼中,已經指定了頁面顯示模板為news_report.html。其實,在Django工程中創建模板是一件非常方便的事情,下面要在article目錄內創建這個模板頁面,首先新建一個名為templates的文件夾,然后在這個模板目錄里創建所需的news_report.html模板文件,模板的代碼如下:
清單 5. news_report模板代碼

            
            
              新聞統計列表
            
            

新聞統計列表

{% for list_dict in article_listing %}
  • 新聞的分類: {{ list_dict.items_title }}
  • 新聞的數目: {{ list_dict.item_count }}
  • 已發布的新聞數目: {{ list_dict.items_complete }} ({{ list_dict.percent_complete }}%)
{% endfor %}

一般來說,Django的模板代碼和普通的HTML代碼看上去沒有太大差別,只是添加了Django特定的模板標記,這些標記允許開發者為Django模板添加頁面邏輯,比方說將views.py中render_to_response函數返回的數據庫結果集顯示在頁面中,Django特有的標簽在模板頁里以“{%”作為開始并以“%}”作為結束。嵌入Django模板的變量則以“{{”作為開始并以“}}”結束。

在上面的模板代碼里面,用到了標記{% for news_dict in article_listing %}以及{% endfor %}。這樣的標記告訴Django模板處理機制循環取出news中的item項輸出在頁面中,在for循環內部,通過article_listing的屬性得到View中對應的數據項字段的值并顯示每個news項的Title標題以及news中的item項數目。

當Django的View和Template都已經準備妥當,下面僅需要幾步配置來告訴Django存儲工程應用的模板位置,這需要對配置文件setting.py中的TEMPLATE_DIRS項進行設置。在本例中加入模板文件"news_report.html"的存儲路徑就可以讓Django把對View進行處理的結果集通過指定模板返回。按照本例應用的結構,TEMPLATE_DIRS參數的內容設置為:

復制代碼 代碼如下:
icle/templates',

這里不要忘記Django需要在路徑的最末尾添加一個逗號。接下來僅需要設置訪問article時的URL轉向地址就可以。打開urls.py文件,在admin后臺管理的轉向地址下一行添加如下語句:

復制代碼 代碼如下:
(r'^report/$', 'news.article.views.news_report'),

在這里語段的最末尾,也需要有逗號標記段落的結束。在這里可以看到,Django的URL轉發設計的非常簡潔,在配置文件urls.py中對應于view的轉發請求都由兩部分組成,第一部分遵循正則表達式指定相匹配的URL地址,第二部分是對應在View里面處理轉發請求的函數。

完成了這些步驟,就可以在命令提示符下再次啟動Django服務器,看一下上述努力的成果了,在瀏覽器中打開鏈接http://127.0.0.1:8000/report/,將會看到新聞列表的返回界面。頁面中顯示了數據庫中已添加所有新聞的分類統計信息。值得一提的是,Django模板支持多層嵌套,并且每一層都可以使用DIV+CSS方式完成布局,可以方便的讓站點頁面遵循統一風格,看起來美觀大方。

在上述整個過程中,對使用Django進行Web開發進行了初步的介紹。在應用中寫的Python代碼不過幾十行,比較起來其他的開發語言,Django顯得非常便捷實用,最后再來回顧一下Django都幫助我們做了哪些工作吧:

  • ??? 通過Django的對象關系映射模型建立了存儲新聞分類以及新聞項的兩張數據表,并用syncdb命令同步更新到數據庫。
  • ??? 借助Django的管理功能在應用中生成了一個漂亮實用的后臺管理界面。
  • ??? 利用Django函數和標簽編寫了view功能模塊以及顯示數據結果的Template模板。

結束語

Django開發框架的出現,讓本例所有的這些工作變得簡潔有序、賞心悅目。隨著Django開發框架的不斷發展,更多新的特性將逐步被添加到框架體系中來。可以不夸張的說,Django已經從ROR的潛在競爭者,逐漸成長為可以與之針鋒相對的Python框架。如果說與Ruby框架ROR的差距,或許Django目前最缺少的還是ROR那龐大的用戶群體。

如果看完這篇文章,讀者打算一步一步進入Django的精彩世界,可以在Django官方站點www.djangoproject.com上閱讀更多的開發文檔、訂閱Google Group上的Django郵件討論組,或者跟隨Django官方的教程指南進行學習,開始一次讓思想自由翱翔的旅程,相信在這個過程中收獲的不僅僅是使用Django開發的新奇體驗。

希望有更多的讀者來使用Django框架,希望有更多的人來一起來關注Django的發展,甚至參與到Django的項目開發當中,為開源的社區貢獻一份力量。期待Django快速發展的明天、期待Python實現的Rails框架將會有絢麗的未來!


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧美一级特黄真人毛片 | 噜噜噜天天躁狠狠躁夜夜精品 | 九九九九热 | 色综合精品久久久久久久 | 深夜网站在线观看 | 2021精品综合久久久久 | 成人影院高清在线观看免费网站 | 亚洲黄色大片 | 鲁丝一区二区三区不属 | 欧美色精品天天在线观看视频 | 99热这里只有精品首页 | 毛片在线播放a | 欧美大成色www永久网站 | 亚洲专区区免费 | 婷婷在线视频观看 | 米奇精品一区二区三区在线观看 | 寡妇野外啪啪一区二区 | 久久免费观看国产99精品 | 欧美一区在线观看视频 | 亚洲欧美综合一区二区三区四区 | 国产成人精品在线观看 | 久久思 | 欧美国产一区二区三区 | 欧美福利在线视频 | 国产91一区二这在线播放 | 欧美日韩国产人成在线观看 | 亚洲精品成人7777在线观看 | 福利在线观看视频 | 一区二区三区在线 | 国产精品18久久久久久小说 | 国产一级毛片免 | 欧美高清视频www夜色资源 | 亚洲 欧美 精品 中文第三 | 6080欧美一区二区三区四区 | 99精品视频在线免费观看 | 九九热伊人 | 91麻豆精品一二三区在线 | 午夜精品九九九九99蜜桃 | 老头与老头同性tube可播放 | 私人影院在线播放 | 福利姬在线精品观看 |