簡化Python的Django框架代碼的一些示例
盡管Django的流行和普及, 一些開發(fā)者仍然認為她是一個過時的web開發(fā)框架, 僅僅適合內(nèi)容豐富的web程序。 然而現(xiàn)在大多數(shù)web程序往往不是富內(nèi)容的, 這似乎讓Django看起來不是最佳選擇的web框架。
那么讓我們花點時間從現(xiàn)在的web開發(fā)實踐中重新認識下她吧。
簡單清晰的Django
一個web框架主要是幫助web程序生成核心的架構, 以便在其他的項目中重用。 Django正是以此為基礎, 快速構建web程序。 Django的核心主要是WSGI程序, 通過處理HTTP請求并返回有意義的HTTP應答。 她提供了各種工具, 像生成URL路由, cookie的處理, 解析表單數(shù)據(jù)和上傳文件。
還有, Django為HTTP應答創(chuàng)建了動態(tài)的模板引擎。你可以立馬使用, 為了豐富web程序構建體驗, 她提供了很多的各種各樣的過濾器和標簽, 去創(chuàng)建動態(tài)的可擴展模板。
通過這些工具, 你能輕松地在Django的項目中創(chuàng)建簡單清晰的微型框架。
我們知道有些人喜歡自己造輪子。 我們不是說貶低這種行為, 但是使用Django開發(fā)的話會讓我們有更少的干擾。 比如, 當你在糾結 Jinja2,, Mako, Genshi, Cheetah的時候, 你可能已經(jīng)在使用Django已存在的模板引擎。 更少的糾結讓我們更多的享受愉快的開發(fā)過程。
培訓新的Django使用者
在Django和其他的web框架的社區(qū)中有一個很大的問題, 就是對新使用者的培訓問題。 就像有很多Django使用者是通過Django官網(wǎng)上的創(chuàng)建一個投票程序來學習Django的。 我們很多老道的Django開發(fā)者認為它是一個進入Django社區(qū)的“通過儀式”。 但是它是學習Django最好的方法嗎? 我覺得不是。
目前, 這個投票程序有六個部分。 雖然每個部分都有它的意義, 但是直到第三個你才能寫你的視圖和構造HTTP應答。 相比較簡單的“Hello World”程序在某些流行的python微型框架(像Flask和Bottle)的首頁而言, 這太遙遠了。 最好的學習方法是當我們學習Django的某一塊的時候沒有過多的阻礙, 并且能夠專注于處理請求和應答的交互上。 新使用者在構建常見的web任務的時候能從框架的其他部分中獲得幫助, 像回話管理, 用戶驗證和內(nèi)置的admin接口。
那么, 按照我們的意思來構建一個簡化版的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')
一般來說, 這段代碼應該在view.py里面。 不過在這個簡化版的教程中, 我們把Django項目中所有代碼放在一個單一的文件。
應用的當前部分與下一部分的完美紐帶是鏈接結構。上面的代碼就期望這樣的一個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行代碼我們就為應用程序構建好了在Django上運行的基礎!現(xiàn)在,讓我們完成一些基本設置,使應用程序可以執(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ù)據(jù)庫的配置。這些設置將可以作為一個針對新用戶進入的門檻,當這些新用戶試圖確定使用什么數(shù)據(jù)庫時,可能避免出現(xiàn)混亂的情況。當開發(fā)一個項目時,我們希望確保自己的工作專注于特定部分,從而降低工作中的阻礙。
注意:在settings.configure文件里設置隨機的 SECRET_KEY以便保護session and cross-site request forgery (CSRF).
由于沒有使用 start project命令生成該結構,我們會丟掉manage.pyfile文件.因此需要手工添加相關的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)在可以從命令行啟動應用了:
$ python project_name.py runserver
訪問 127.0.0.1:8000, 會看到 “Powered by Django”頁面了!
看到這里, 你可能要問: “模型和視圖在哪呢?”。 在此之前讓我們先放松一下。 讓我們討論下Django到底是什么--她是一個包含一系列我們經(jīng)常需要用到的工具的web框架, 并且你能很容易在項目中引用它們。 接下來我們將介紹如何引入這些工具。 構建一個模板就是個不錯的列子。 讓我們開始動手吧。
添加模板文件前我們要添加urls和一些必要設置, 要讓Django知道模板文件放在哪。 把這些設置添加到文件里吧。
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模塊的導入。通過這樣做,我們已經(jīng)為新用戶創(chuàng)建了一種容易的方式指向他們的項目文件夾。現(xiàn)在我們能在我們的TEMPLATE_DIRS設置中輕松的添加指向模板的路徑,并開始體驗Django的內(nèi)置標簽和過濾器的優(yōu)勢!
正如你可以看到,通過將創(chuàng)建一個Django應用程序的基礎部分分解成較小的部分,我們可以創(chuàng)建一個更簡單的方法給內(nèi)建的新用戶。我們需要重新學習怎樣讓Django在沒有ORM和Django管理的時候創(chuàng)建Django應用程序。需要認識到Django的那些內(nèi)置功能他們真是的是什么。在使用框架時他們不是必須的,如果你感覺他們不是必須的,你并沒有失去太多。我們開始使用Django好的部分而不是感覺它的重量,就像我們學習Python的標準庫。讓我們開始移去過時的東西,看看它的源碼,功能真的是很豐富。
因此,基于所有的這些,在輕量的模式中你正在考慮構建一些能夠開發(fā)什么的應用程序?
相關文章
Python將DataFrame的某一列作為index的方法
下面小編就為大家分享一篇Python將DataFrame的某一列作為index的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04使用Python快速實現(xiàn)文件共享并通過內(nèi)網(wǎng)穿透技術公網(wǎng)訪問
數(shù)據(jù)共享作為和連接作為互聯(lián)網(wǎng)的基礎應用,不僅在商業(yè)和辦公場景有廣泛的應用,對于個人用戶也有很強的實用意義,今天,筆者就為大家介紹,如何使用python這樣的簡單程序語言,在自己的電腦上搭建一個共享文件服務器,需要的朋友可以參考下2023-10-10詳解Python結合Genetic?Algorithm算法破解網(wǎng)易易盾拼圖驗證
很多網(wǎng)站在登錄或者注冊時都會遇到拼圖驗證碼,這種拼圖驗證碼實際上是多個小碎片經(jīng)過重新組合成的一張整體。本文將和大家分享一個基于Python?Genetic?Algorithm的破解拼圖驗證碼的辦法,需要的可以參考一下2022-02-02