譯者:vimiix
原文地址:https://simpleisbetterthancomplex.com/series/2017/09/04/a-complete-beginners-guide-to-django-part-1.html
三條:簡單3步,Pycharm 中運行 Django!四條:Django提速手冊:為Django應(yīng)用提速!五條:“工資3000,一年存了20萬”:掌握理財技能,讓我少奮斗10年!?.
↑?關(guān)注 + 星標?,每天學(xué)Python新技能
后臺回復(fù)【大禮包】送你Python自學(xué)大禮包
前言

今天我將開始一個關(guān)于 Django 基礎(chǔ)知識的全新系列教程,這是一個開始學(xué)習(xí) Django 的完整入門指南,教程材料一共會被分為七個部分。我們將從安裝、開發(fā)環(huán)境的準備,模型,視圖,模板,URL到更高級的主題(如遷移,測試和部署)中詳細探討所有基本概念。我想做一些不一樣的事情,這是一個容易學(xué)習(xí),內(nèi)容豐富且不失趣味的教程。我的想法是在文章中穿插一些漫畫的方式來演示說明相應(yīng)的概念和場景。我希望大家能夠享受這種閱讀!當年我在一所大學(xué)擔任代課教授時,我曾經(jīng)在計算機科學(xué)專業(yè)給新來的學(xué)生講授網(wǎng)絡(luò)開發(fā)學(xué)科。那時我總是會用下面這個孔夫子的名言開始新的課程:(譯者注:不確定是孔子講的,但這句話早在中國古代就有所提到,出自荀子《儒效篇》“不聞不若聞之,聞之不若見之,見之不若知之,知之不若行之;學(xué)至于行之而止矣”)所以,請動起手來!不要只是閱讀教程。我們一起來練習(xí)!通過實踐和練習(xí)你會收獲的更多。為什么要學(xué)習(xí)Django?
Django是一個用 Python 編寫的 Web 框架。Web 框架是一種軟件,基于web框架可以開發(fā)動態(tài)網(wǎng)站,各種應(yīng)用程序以及服務(wù)。它提供了一系列工具和功能,可以解決許多與Web開發(fā)相關(guān)的常見問題,比如:安全功能,數(shù)據(jù)庫訪問,會話,模板處理,URL路由,國際化,本地化,等等。使用諸如 Django 之類的網(wǎng)絡(luò)框架,使我們能夠以標準化的方式快速開發(fā)安全可靠的Web應(yīng)用程序,而無需重新發(fā)明輪子。那么,Django有什么特別之處呢?對于初學(xué)者來說,它是一個Python Web框架,這意味著你可以受益于各種各樣的開源庫包。python軟件包資料庫(pypi)擁有超過11.6萬個軟件包(2017年9月6日的數(shù)據(jù))。如果當你想要解決一個特定的問題的時候,可能有人已經(jīng)為它實現(xiàn)了一個庫來供你使用。Django是用python編寫的最流行的web框架之一。它絕對是最完整的,提供了各種各樣的開箱即用的功能,比如用于開發(fā)和測試的獨立Web服務(wù)器,緩存,中間件系統(tǒng),ORM,模板引擎,表單處理,基于Python單元測試的工具接口。Django還自帶內(nèi)部電池,提供內(nèi)置應(yīng)用程序,比如一個認證系統(tǒng),一個可用于 CRUD(增刪改查) 操作并且自動生成頁面的后臺管理界面,生成訂閱文檔(RSS/Atom),站點地圖等。甚至在django中內(nèi)建了一個地理信息系統(tǒng)(GIS)框架。Django的開發(fā)得到了Django軟件基金會的支持,并且由jetbrains和instagram等公司贊助。Django現(xiàn)在已經(jīng)存在了相當長的一段時間了。到現(xiàn)在為止,活躍的項目開發(fā)時間已經(jīng)超過12年,這也證明了它是一個成熟,可靠和安全的網(wǎng)絡(luò)框架。誰在使用Django?
知道誰在使用Django是很好的,同時也想一想你可以用它來做些什么。在使用Django的大型網(wǎng)站有:Instagram,Disqus,Mozilla,Bitbucket,Last.fm,國家地理。想知道更多的示例,你可以到Django Sites數(shù)據(jù)庫中查看,它提供超過五千個Django驅(qū)動的網(wǎng)站列表。順便說一下,去年在Django 2016年發(fā)布會上,Django核心開發(fā)人員,Instagram員工 carl meyer,就Instagram如何大規(guī)模使用Django以及它如何支持他們的用戶增長做過一次分享。這是個一小時的演講,如果你有興趣學(xué)習(xí)了解更多的話,這是一次很有趣的演講。安裝
我們需要做的第一件事是在我們的電腦上安裝一些程序,以便能夠開始使用django。基本的設(shè)置包括安裝Python,Virtualenv和Django。
使用虛擬環(huán)境不是強制性的,但是我還是強烈建議大家這樣做。如果你是一個初學(xué)者,那么最好形成一個良好的開端。當你在用 Django 開發(fā)一個網(wǎng)站或者一個Web項目的時候,不得不安裝外部庫以支持開發(fā)是非常常見的事情。使用虛擬環(huán)境,你開發(fā)的每個項目都會有其獨立的環(huán)境。這樣的話,包之間的依賴關(guān)系不會發(fā)生沖突。同時也使得你能在不同Django版本上運行的本地機器的項目。安裝 Python 3.6.2
我們想要做的第一件事是安裝最新版的Python,那就是Python 3.6.2。至少是在我寫這篇教程的時候。如果有更新的版本,請使用新版。接下來的步驟也應(yīng)該保持大致相同的做法。我們將使用Python 3,因為大部分主要的Python庫已經(jīng)被移植到python 3,并且下一個主要的django版本(2.x)也將不再支持python 2。所以Python 3是正確的選擇。最好的方法是通過Homebrew安裝。如果你的Mac還沒有安裝Homebrew的話,在終端中執(zhí)行下面的命令:/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
如果你沒有安裝命令行工具(Command Line Tools),Homebrew的安裝可能需要稍長一點的時間。但它會幫助你處理好一切,所以不用擔心。只需要坐下來等到安裝完成即可。==> Installation successful!
==> Homebrew has enabled anonymous aggregate user behaviour analytics.
Read the analytics documentation (and how to opt-out) here:
?https://docs.brew.sh/Analytics.html
==> Next steps:
- Run `brew help` to get started
- Further documentation:
? ?https://docs.brew.sh
由于macOS原本已經(jīng)安裝了python 2,所以在安裝python 3之后,你將可以同時使用這兩個版本。需要運行Python 2的話,在終端中通過命令 python 啟動。如果想運行Python 3,則使用python3 來啟動。python3 --version
Python 3.6.2
很棒,python已經(jīng)啟動并正在運行。下一步:虛擬環(huán)境!安裝 Virtualenv
接下來這一步,我們將通過pip(一個管理和安裝Python包的工具)來安裝Virtualenv。請注意,Homebrew已經(jīng)為你安裝好了pip,在python 3.6.2下的名稱為 pip3。sudo pip3 install virtualenv
到目前為止,我們執(zhí)行的安裝都是在操作系統(tǒng)環(huán)境下運行的。從現(xiàn)在開始,我們安裝的所有東西,包括django本身,都將安裝在虛擬環(huán)境中。這樣想一下:對于你開始的每個Django項目,你首先會為它創(chuàng)建一個虛擬環(huán)境。這就像每個Django項目都有一個沙盒。所以你隨意運行,安裝軟件包,卸載軟件包而不會破壞任何東西。我習(xí)慣在電腦上創(chuàng)建一個名為Development的文件夾。然后,我用它來組織我所有的項目和網(wǎng)站。但你也可以按照接下來的步驟創(chuàng)建適合你自己的目錄。通常,我首先在Development文件夾中創(chuàng)建一個項目名稱的新文件夾。既然這將是我們第一個項目,我們沒必要挑選一個獨特的名字。現(xiàn)在,我們可以稱之為myproject。mkdir myproject
cd myproject
這個文件夾是級別較高的目錄,將存儲與我們的Django項目相關(guān)的所有文件和東西,包括它的虛擬環(huán)境。所以讓我們開始創(chuàng)建我們的第一個虛擬環(huán)境并安裝django。virtualenv venv -p python3
這樣我們的虛擬環(huán)境就創(chuàng)建好了。在開始使用它之前,我們需要先激活一下環(huán)境:如果你在命令行前面看到 (venv),就代表激活成功了,就像這樣:讓我們試著了解一下這里發(fā)生了什么。我們創(chuàng)建了一個名為venv的特殊文件夾。該文件夾內(nèi)包含了一個python的副本。在我們激活了venv環(huán)境之后,當我們運行Python命令時,它將使用我們存儲在venv里面的本地副本,而不是我們之前在操作系統(tǒng)中安裝的那個。另一個重要的事情是,pip程序也已經(jīng)安裝好了,當我們使用它來安裝Python的軟件包(比如Django)時,它將被安裝在venv環(huán)境中。請注意,當我們啟用venv時,我們將使用命令python(而不是python3)來調(diào)用Python 3.6.2,并且僅使用pip(而不是pip3)來安裝軟件包。順便說一句,要想退出venv環(huán)境,運行下面的命令:但是,我們現(xiàn)在先保持激活狀態(tài)來進行下一步。安裝 Django 1.11.4
很簡單,現(xiàn)在我們已經(jīng)啟動了venv,運行以下命令來安裝django:
現(xiàn)在一切就緒!
啟動一個新項目,執(zhí)行下面的命令來創(chuàng)建一個新的 Django 項目:
django-admin startproject myproject
命令行工具django-admin會在安裝Django的時候一起自動安裝好。執(zhí)行了上面的命令以后,系統(tǒng)會為Django項目生成基礎(chǔ)文件夾結(jié)構(gòu)。現(xiàn)在,我們的myproject目錄結(jié)構(gòu)如下所示:myproject/ ? ? ? ? ? ? ? ? ?<-- 高級別的文件夾
|-- myproject/ ? ? ? ? ? ? <-- Django項目文件夾
| ? ?|-- myproject/
| ? ?| ? ?|-- __init__.py
| ? ?| ? ?|-- settings.py
| ? ?| ? ?|-- urls.py
| ? ?| ? ?|-- wsgi.py
| ? ?+-- manage.py
+-- venv/ ? ? ? ? ? ? ? ? ?<-- 虛擬環(huán)境文件夾
我們最初的項目結(jié)構(gòu)由五個文件組成:- manage.py:使用django-admin命令行工具的快捷方式。它用于運行與我們項目相關(guān)的管理命令。我們將使用它來運行開發(fā)服務(wù)器,運行測試,創(chuàng)建遷移等等。
- __init.py:這個空文件告訴python這個文件夾是一個python包。
- settings.py:這個文件包含了所有的項目配置。將來我們會一直提到這個文件!
- urls.py:這個文件負責映射我們項目中的路由和路徑。例如,如果你想在訪問URL
/ about/ 時顯示某些內(nèi)容,則必須先在這里做映射關(guān)系。 - wsgi.py:該文件是用于部署的簡單網(wǎng)關(guān)接口。你可以暫且先不用關(guān)心她的內(nèi)容,就先讓他在那里就好了。
django自帶了一個簡單的網(wǎng)絡(luò)服務(wù)器。在開發(fā)過程中非常方便,所以我們無需安裝任何其他軟件即可在本地運行項目。我們可以通過執(zhí)行命令來測試一下它:python manage.py runserver
現(xiàn)在,你可以忽略終端中出現(xiàn)的遷移錯誤;我們將在稍后討論。現(xiàn)在在Web瀏覽器中打開URL:http://127.0.0.1:8000,你應(yīng)該看到下面的頁面:使用組合鍵 Control + C來終止開發(fā)服務(wù)器。Django 應(yīng)用
在Django的哲學(xué)中,我們有兩個重要的概念:- app:是一個可以做完成某件事情的Web應(yīng)用程序。一個應(yīng)用程序通常由一組models(數(shù)據(jù)庫表),views(視圖),templates(模板),tests(測試) 組成。
- project:是配置和應(yīng)用程序的集合。一個項目可以由多個應(yīng)用程序或一個應(yīng)用程序組成。
請注意,如果沒有一個project,你就無法運行Django應(yīng)用程序。像博客這樣的簡單網(wǎng)站可以完全在單個應(yīng)用程序中編寫,例如可以將其命名為blog或weblog。這是組織源代碼的一種方式。現(xiàn)在剛開始,判斷什么是或不是應(yīng)用程序這些還不太重要。包括如何組織代碼等。現(xiàn)在不用擔心那些問題!首先讓我們對Django的API和基礎(chǔ)知識進行梳理一遍。好的!那么,為了方便說明,我們來創(chuàng)建一個簡單的網(wǎng)絡(luò)論壇或討論區(qū)。要創(chuàng)建我們的第一個應(yīng)用程序,請?zhí)D(zhuǎn)到manage.py文件所在的目錄并執(zhí)行以下命令:django-admin startapp boards
通過這條指令,系統(tǒng)會給我們創(chuàng)建以下目錄結(jié)構(gòu):myproject/
|-- myproject/
| ? ?|-- boards/ ? ? ? ? ? ? ? ?<-- 我們新的Django應(yīng)用(app)!
| ? ?| ? ?|-- migrations/
| ? ?| ? ?| ? ?+-- __init__.py
| ? ?| ? ?|-- __init__.py
| ? ?| ? ?|-- admin.py
| ? ?| ? ?|-- apps.py
| ? ?| ? ?|-- models.py
| ? ?| ? ?|-- tests.py
| ? ?| ? ?+-- views.py
| ? ?|-- myproject/
| ? ?| ? ?|-- __init__.py
| ? ?| ? ?|-- settings.py
| ? ?| ? ?|-- urls.py
| ? ?| ? ?|-- wsgi.py
| ? ?+-- manage.py
+-- venv/
- migrations/:在這個文件夾里,Django會存儲一些文件以跟蹤你在models.py文件中創(chuàng)建的變更,用來保持數(shù)據(jù)庫和models.py的同步。
- admin.py:這個文件為一個django內(nèi)置的應(yīng)用程序Django Admin的配置文件。
- apps.py:這是應(yīng)用程序本身的配置文件。
- models.py:這里是我們定義Web應(yīng)用程序數(shù)據(jù)實例的地方。models會由Django自動轉(zhuǎn)換為數(shù)據(jù)庫表。
- tests.py:這個文件用來寫當前應(yīng)用程序的單元測試。
- views.py:這是我們處理Web應(yīng)用程序請求(request)/響應(yīng)(resopnse)周期的文件。
現(xiàn)在我們創(chuàng)建了我們的第一個應(yīng)用程序,讓我們來配置一下項目以便啟用這個應(yīng)用程序。要做到這一點,打開settings.py并嘗試找到INSTALLED_APPS變量:INSTALLED_APPS = [
? ?'django.contrib.admin',
? ?'django.contrib.auth',
? ?'django.contrib.contenttypes',
? ?'django.contrib.sessions',
? ?'django.contrib.messages',
? ?'django.contrib.staticfiles',
]
如你所見,Django默認已經(jīng)安裝了6個內(nèi)置應(yīng)用程序。它們提供大多數(shù)Web應(yīng)用程序所需的常用功能,如身份驗證,會話,靜態(tài)文件管理(圖像,JavaScript,CSS等)等。我們將會在本系列教程中探索這些應(yīng)用程序。但現(xiàn)在,先不管它們,只需將我們的應(yīng)用程序boards添加到INSTALLED_APPS列表即可:INSTALLED_APPS = [
? ?'django.contrib.admin',
? ?'django.contrib.auth',
? ?'django.contrib.contenttypes',
? ?'django.contrib.sessions',
? ?'django.contrib.messages',
? ?'django.contrib.staticfiles',
? ?'boards', ?# 譯者注:建議和作者一樣空一行來區(qū)別內(nèi)置app和自定義的app
]
使用前面漫畫正方形和圓圈的比喻,黃色的圓圈就是我們的boards應(yīng)用程序,django.contrib.admin, django.contrib.auth等就是紅色的圓圈。Hello, World!
現(xiàn)在來寫我們的第一個視圖(view)。我們將在下一篇教程中詳細探討它。但現(xiàn)在,讓我們試試看看如何用Django創(chuàng)建一個新頁面。打開boards應(yīng)用程序中的views.py文件,并添加以下代碼:from django.http import HttpResponse
def home(request):
? ?return HttpResponse('Hello, World!')
視圖是接收httprequest對象并返回一個httpresponse對象的Python函數(shù)。接收 request 作為參數(shù)并返回 response 作為結(jié)果。這個流程你必須記住!我們在這里定義了一個簡單的視圖,命名為home,它只是簡單地返回一個信息,一個字符串hello,world!。現(xiàn)在我們必須告訴Django什么時候會調(diào)用這個view。這需要在urls.py文件中完成:from django.conf.urls import url
from django.contrib import admin
from boards import views
urlpatterns = [
? ?url(r'^$', views.home, name='home'),
? ?url(r'^admin/', admin.site.urls),
]
如果你將上面的代碼片段與你的urls.py文件進行比較,你會注意到我添加了以下新代碼:url(r'^ $',views.home,name ='home')并從我們的應(yīng)用程序boards中導(dǎo)入了views模塊通過from boards import views。和我之前提到的一樣,我們將在稍后詳細探討這些概念。現(xiàn)在,Django使用正則表達式來匹配請求的URL。對于我們的home視圖,我使用^$ 正則,它將匹配一個空路徑,也就是主頁(這個URL:http://127.0.0.1:8000 )。如果我想匹配的URL是 http://127.0.0.1:8000/homepage/ ,那么我的URL正則表達式就會是:url(r'^homepage/$', views.home, name='home')。python manage.py runserver
在一個Web瀏覽器中,打開 http://127.0.0.1:8000 這個鏈接:就是這樣!你剛剛創(chuàng)建成功了你的第一個視圖總結(jié)
這是本系列教程的第一部分。在本教程中,我們學(xué)習(xí)了如何安裝最新的Python版本以及如何設(shè)置開發(fā)環(huán)境。我們還介紹了虛擬環(huán)境,開始了我們的第一個django項目,并已經(jīng)創(chuàng)建了我們的初始應(yīng)用程序。我希望你會喜歡第一部分!第二部分將涉及模型,視圖,模板和URLs。我們將一起探索Django所有的基礎(chǔ)知識!為了讓我們能夠保持學(xué)習(xí)過程中頁面同步,我在Github上提供了源代碼。這個項目的當前狀態(tài)可以在release tag v0.1-lw下找到。下面是直達鏈接:https://github.com/sibtc/django-beginners-guide/tree/v0.1-lw
掃碼加我微信備注「三劍客」送你上圖三本Python入門電子書