盡管Django的流行和普及, 一些開發(fā)者仍然認(rèn)為她是一個過時的web開發(fā)框架, 僅僅適合內(nèi)容豐富的web程序。 然而現(xiàn)在大多數(shù)web程序往往不是富內(nèi)容的, 這似乎讓Django看起來不是最佳選擇的web框架。
那么讓我們花點時間從現(xiàn)在的web開發(fā)實踐中重新認(rèn)識下她吧。
簡單清晰的Django
一個web框架主要是幫助web程序生成核心的架構(gòu), 以便在其他的項目中重用。 Django正是以此為基礎(chǔ), 快速構(gòu)建web程序。 Django的核心主要是WSGI程序, 通過處理HTTP請求并返回有意義的HTTP應(yīng)答。 她提供了各種工具, 像生成URL路由, cookie的處理, 解析表單數(shù)據(jù)和上傳文件。
還有, Django為HTTP應(yīng)答創(chuàng)建了動態(tài)的模板引擎。你可以立馬使用, 為了豐富web程序構(gòu)建體驗, 她提供了很多的各種各樣的過濾器和標(biāo)簽, 去創(chuàng)建動態(tài)的可擴(kuò)展模板。
通過這些工具, 你能輕松地在Django的項目中創(chuàng)建簡單清晰的微型框架。
我們知道有些人喜歡自己造輪子。 我們不是說貶低這種行為, 但是使用Django開發(fā)的話會讓我們有更少的干擾。 比如, 當(dāng)你在糾結(jié) Jinja2,, Mako, Genshi, Cheetah的時候, 你可能已經(jīng)在使用Django已存在的模板引擎。 更少的糾結(jié)讓我們更多的享受愉快的開發(fā)過程。
?
培訓(xùn)新的Django使用者
在Django和其他的web框架的社區(qū)中有一個很大的問題, 就是對新使用者的培訓(xùn)問題。 就像有很多Django使用者是通過Django官網(wǎng)上的創(chuàng)建一個投票程序來學(xué)習(xí)Django的。 我們很多老道的Django開發(fā)者認(rèn)為它是一個進(jìn)入Django社區(qū)的“通過儀式”。 但是它是學(xué)習(xí)Django最好的方法嗎? 我覺得不是。
目前, 這個投票程序有六個部分。 雖然每個部分都有它的意義, 但是直到第三個你才能寫你的視圖和構(gòu)造HTTP應(yīng)答。 相比較簡單的“Hello World”程序在某些流行的python微型框架(像Flask和Bottle)的首頁而言, 這太遙遠(yuǎn)了。 最好的學(xué)習(xí)方法是當(dāng)我們學(xué)習(xí)Django的某一塊的時候沒有過多的阻礙, 并且能夠?qū)W⒂谔幚碚埱蠛蛻?yīng)答的交互上。 新使用者在構(gòu)建常見的web任務(wù)的時候能從框架的其他部分中獲得幫助, 像回話管理, 用戶驗證和內(nèi)置的admin接口。
那么, 按照我們的意思來構(gòu)建一個簡化版的Django教程:
?
import sys from django.conf import settings from django.conf.urls import patterns from django.http import HttpResponse from django.core.management import execute_from_command_line settings.configure( DEBUG=True, SECRET_KEY='placerandomsecretkeyhere', ROOT_URLCONF=sys.modules[__name__], ) def index(request): return HttpResponse('Powered by Django') urlpatterns = patterns('', (r'^$', index), ) if __name__ == "__main__": execute_from_command_line(sys.argv)
簡單吧。 這段簡短的代碼是運行Django項目所需要的全部。 讓我們開始逐步解釋下各部分代碼吧。
首先, 我們需要確保引入了HttpResponse, 并且返回我們希望返回的內(nèi)容。
?
from django.http import HttpResponse def index(request): return HttpResponse('Powered by Django')
一般來說, 這段代碼應(yīng)該在view.py里面。 不過在這個簡化版的教程中, 我們把Django項目中所有代碼放在一個單一的文件。
應(yīng)用的當(dāng)前部分與下一部分的完美紐帶是鏈接結(jié)構(gòu)。上面的代碼就期望這樣的一個url索引,所以我們需要為它創(chuàng)建一個。
from django.conf.urls import patterns from django.http import HttpResponse def index(request): return HttpResponse('Powered by Django') urlpatterns = patterns('', (r'^$', index), )
僅僅通過以上7行代碼我們就為應(yīng)用程序構(gòu)建好了在Django上運行的基礎(chǔ)!現(xiàn)在,讓我們完成一些基本設(shè)置,使應(yīng)用程序可以執(zhí)行起來。
?
import sys from django.conf import settings from django.conf.urls import patterns from django.http import HttpResponse settings.configure( DEBUG=True, SECRET_KEY='placerandomsecretkeyhere', ROOT_URLCONF=sys.modules[__name__], ) def index(request): return HttpResponse('Powered by Django') urlpatterns = patterns('', (r'^$', index), )
你可能已經(jīng)發(fā)現(xiàn)在上面的例子中,我們已經(jīng)剝離了那些設(shè)置,并且尤其是省略了數(shù)據(jù)庫的配置。這些設(shè)置將可以作為一個針對新用戶進(jìn)入的門檻,當(dāng)這些新用戶試圖確定使用什么數(shù)據(jù)庫時,可能避免出現(xiàn)混亂的情況。當(dāng)開發(fā)一個項目時,我們希望確保自己的工作專注于特定部分,從而降低工作中的阻礙。
?
注意:在settings.configure文件里設(shè)置隨機的 SECRET_KEY以便保護(hù)session and cross-site request forgery (CSRF).
由于沒有使用 start project命令生成該結(jié)構(gòu),我們會丟掉manage.pyfile文件.因此需要手工添加相關(guān)的manage.pyand信息:
?
import sys from django.conf import settings from django.conf.urls import patterns from django.http import HttpResponse from django.core.management import execute_from_command_line settings.configure( DEBUG=True, SECRET_KEY='placerandomsecretkeyhere', ROOT_URLCONF=sys.modules[__name__], ) def index(request): return HttpResponse('Powered by Django') urlpatterns = patterns('', (r'^$', index), ) if __name__ == "__main__": execute_from_command_line(sys.argv)
現(xiàn)在可以從命令行啟動應(yīng)用了:
?
$ python project_name.py runserver
訪問 127.0.0.1:8000, 會看到? “Powered by Django”頁面了!
看到這里, 你可能要問: “模型和視圖在哪呢?”。 在此之前讓我們先放松一下。 讓我們討論下Django到底是什么--她是一個包含一系列我們經(jīng)常需要用到的工具的web框架, 并且你能很容易在項目中引用它們。 接下來我們將介紹如何引入這些工具。 構(gòu)建一個模板就是個不錯的列子。 讓我們開始動手吧。
添加模板文件前我們要添加urls和一些必要設(shè)置, 要讓Django知道模板文件放在哪。 把這些設(shè)置添加到文件里吧。
?
import os import sys BASE_PATH = os.path.dirname(__file__) from django.conf import settings from django.conf.urls import patterns, url from django.core.management import execute_from_command_line from django.shortcuts import render settings.configure( DEBUG=True, SECRET_KEY='placerandomsecretkeyhere', ROOT_URLCONF=sys.modules[__name__], TEMPLATE_DIRS=( os.path.join(BASE_PATH, 'templates'), ), ) def index(request): return render(request, 'index.html', {'request': request}) urlpatterns = patterns('', url(r'^$', index, name='index'), ) if __name__ == "__main__": execute_from_command_line(sys.argv)
?
你會注意到在頂部我們增加了os.path Python模塊的導(dǎo)入。通過這樣做,我們已經(jīng)為新用戶創(chuàng)建了一種容易的方式指向他們的項目文件夾。現(xiàn)在我們能在我們的TEMPLATE_DIRS設(shè)置中輕松的添加指向模板的路徑,并開始體驗Django的內(nèi)置標(biāo)簽和過濾器的優(yōu)勢!
正如你可以看到,通過將創(chuàng)建一個Django應(yīng)用程序的基礎(chǔ)部分分解成較小的部分,我們可以創(chuàng)建一個更簡單的方法給內(nèi)建的新用戶。我們需要重新學(xué)習(xí)怎樣讓Django在沒有ORM和Django管理的時候創(chuàng)建Django應(yīng)用程序。需要認(rèn)識到Django的那些內(nèi)置功能他們真是的是什么。在使用框架時他們不是必須的,如果你感覺他們不是必須的,你并沒有失去太多。我們開始使用Django好的部分而不是感覺它的重量,就像我們學(xué)習(xí)Python的標(biāo)準(zhǔn)庫。讓我們開始移去過時的東西,看看它的源碼,功能真的是很豐富。
因此,基于所有的這些,在輕量的模式中你正在考慮構(gòu)建一些能夠開發(fā)什么的應(yīng)用程序?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

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