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