一個完整的Django入門指南

2021-02-07 Python綠色通道

譯者: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。基本的設置包括安裝PythonVirtualenvDjango
使用虛擬環境不是強制性的,但是我還是強烈建議大家這樣做。如果你是一個初學者,那麼最好形成一個良好的開端。當你在用 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!

==> 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原本已經安裝了python 2,所以在安裝python 3之後,你將可以同時使用這兩個版本。需要運行Python 2的話,在終端中通過命令 python 啟動。如果想運行Python 3,則使用python3 來啟動。

python3 --version
Python 3.6.2

很棒,python已經啟動並正在運行。下一步:虛擬環境!安裝 Virtualenv接下來這一步,我們將通過pip(一個管理和安裝Python包的工具)來安裝Virtualenv。請注意,Homebrew已經為你安裝好了pip,在python 3.6.2下的名稱為 pip3。

sudo pip3 install virtualenv

到目前為止,我們執行的安裝都是在作業系統環境下運行的。從現在開始,我們安裝的所有東西,包括django本身,都將安裝在虛擬環境中。這樣想一下:對於你開始的每個Django項目,你首先會為它創建一個虛擬環境。這就像每個Django項目都有一個沙盒。所以你隨意運行,安裝軟體包,卸載軟體包而不會破壞任何東西。我習慣在電腦上創建一個名為Development的文件夾。然後,我用它來組織我所有的項目和網站。但你也可以按照接下來的步驟創建適合你自己的目錄。通常,我首先在Development文件夾中創建一個項目名稱的新文件夾。既然這將是我們第一個項目,我們沒必要挑選一個獨特的名字。現在,我們可以稱之為myproject

mkdir myproject
cd myproject

這個文件夾是級別較高的目錄,將存儲與我們的Django項目相關的所有文件和東西,包括它的虛擬環境。所以讓我們開始創建我們的第一個虛擬環境並安裝django。

virtualenv 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/                  <-- 高級別的文件夾
|-- myproject/             <-- Django項目文件夾
|    |-- myproject/
|    |    |-- __init__.py
|    |    |-- settings.py
|    |    |-- urls.py
|    |    |-- wsgi.py
|    +-- manage.py
+-- venv/                  <-- 虛擬環境文件夾

manage.py:使用django-admin命令行工具的快捷方式。它用於運行與我們項目相關的管理命令。我們將使用它來運行開發伺服器,運行測試,創建遷移等等。__init.py:這個空文件告訴python這個文件夾是一個python包。settings.py:這個文件包含了所有的項目配置。將來我們會一直提到這個文件!urls.py:這個文件負責映射我們項目中的路由和路徑。例如,如果你想在訪問URL / about/ 時顯示某些內容,則必須先在這裡做映射關係。wsgi.py:該文件是用於部署的簡單網關接口。你可以暫且先不用關心她的內容,就先讓他在那裡就好了。django自帶了一個簡單的網絡伺服器。在開發過程中非常方便,所以我們無需安裝任何其他軟體即可在本地運行項目。我們可以通過執行命令來測試一下它:

python manage.py runserver

現在,你可以忽略終端中出現的遷移錯誤;我們將在稍後討論。現在在Web瀏覽器中打開URL:http://127.0.0.1:8000,你應該看到下面的頁面:使用組合鍵 Control + C來終止開發伺服器。Django 應用app:是一個可以做完成某件事情的Web應用程式。一個應用程式通常由一組models(資料庫表)views(視圖)templates(模板)tests(測試) 組成。project:是配置和應用程式的集合。一個項目可以由多個應用程式或一個應用程式組成。請注意,如果沒有一個project,你就無法運行Django應用程式。像博客這樣的簡單網站可以完全在單個應用程式中編寫,例如可以將其命名為blogweblog。這是組織原始碼的一種方式。現在剛開始,判斷什麼是或不是應用程式這些還不太重要。包括如何組織代碼等。現在不用擔心那些問題!首先讓我們對Django的API和基礎知識進行梳理一遍。好的!那麼,為了方便說明,我們來創建一個簡單的網絡論壇或討論區。要創建我們的第一個應用程式,請跳轉到manage.py文件所在的目錄並執行以下命令:

django-admin startapp boards

myproject/
|-- 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/

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變量:

INSTALLED_APPS = [
   'django.contrib.admin',
   'django.contrib.auth',
   'django.contrib.contenttypes',
   'django.contrib.sessions',
   'django.contrib.messages',
   'django.contrib.staticfiles',
]

如你所見,Django默認已經安裝了6個內置應用程式。它們提供大多數Web應用程式所需的常用功能,如身份驗證,會話,靜態文件管理(圖像,JavaScript,CSS等)等。我們將會在本系列教程中探索這些應用程式。但現在,先不管它們,只需將我們的應用程式boards添加到INSTALLED_APPS列表即可:

INSTALLED_APPS = [
   'django.contrib.admin',
   'django.contrib.auth',
   'django.contrib.contenttypes',
   'django.contrib.sessions',
   'django.contrib.messages',
   'django.contrib.staticfiles',

   'boards',  # 譯者註:建議和作者一樣空一行來區別內置app和自定義的app
]

使用前面漫畫正方形和圓圈的比喻,黃色的圓圈就是我們的boards應用程式,django.contrib.admin, django.contrib.auth等就是紅色的圓圈。Hello, World!現在來寫我們的第一個視圖(view)。我們將在下一篇教程中詳細探討它。但現在,讓我們試試看看如何用Django創建一個新頁面。打開boards應用程式中的views.py文件,並添加以下代碼:

from django.http import HttpResponse

def home(request):
   return HttpResponse('Hello, World!')

視圖是接收httprequest對象並返回一個httpresponse對象的Python函數。接收 request 作為參數並返回 response 作為結果。這個流程你必須記住!我們在這裡定義了一個簡單的視圖,命名為home,它只是簡單地返回一個信息,一個字符串hello,world!。現在我們必須告訴Django什麼時候會調用這個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')並從我們的應用程式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')。

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入門電子書


相關焦點

  • Django分頁完整示例
    大家好,在這篇文章中,我們將展示django的分頁完整的一個實例,當我們打算用Django中開發博客時,需要將帖子列表分別展示到多個頁面上,在這方面,
  • Python+django網頁設計入門(12):使用Bootstrap和jQuery
    前導課程:Python+django網頁設計入門(11):在線考試與自動評分Python+django網頁設計入門(10):分頁顯示Python+django網頁設計入門(9):自定義反爬蟲功能Python+django網頁設計入門(8):網站項目文件夾布局Python+django網頁設計入門
  • Django官方文檔終於出中文版了
    之所以讓我覺得驚喜與意外,是因為:Django 的文檔寫得算是技術文檔裡可讀性相當高的,提供了入門教程和專題指南。對於 Django 官方文檔的內容,做點簡單的介紹:「快速入門」部分是針對 Django 新人的上手指南,入門教程走一遍就是一個簡單的 Django 網站開發流程。
  • Django Form表單完整使用流程
    >如上代碼所示,Django 規定,所有的 Form 對象都必須繼續自 django.forms.Form;我們定義了一個 title 屬性,它是 forms.CharField 類型的,而該欄位類型繼承於基類 Field,每個 Field 欄位類型都有個默認的屬性 required=True 代表該欄位是必填選項。
  • 入門Python, 看這些資料就夠了
    要入門Python,資料並非越多越好, 基本上看這些資料就夠了。 。目錄:第一部分: Python入門&進階教程第二部分: Python Web框架第三部分: Python擴展資料推薦的學習路徑: 1. 使用實驗樓的開箱即用環境快速刷完Python3簡明教程,django基礎教程;2.
  • 機器學習漫遊指南 最完整的入門書單(外文版)
    在雷鋒網所篩選的學習資源中,這堪稱是迄今為止最全面、最完整、權威性比較高的一份 ML 書單,涵蓋了最值得學習者、從業者、開發者認真研讀的精品書目。這份指南適合多樣背景的讀者:從想要了解機器學習的普通人,到入門新手,再到高階開發者和學術研究人員。因此,雷鋒網對其進行編譯整理,特來與大家分享。
  • Python基礎教程——秒懂django操作資料庫
    Python簡單操作資料庫看,是不是很簡單,但是這裡面有個問題:執行SQL返回的數據是個元組中的元組,也就是select * from table_name之後,你得到了一個元組,每個元組的成員又是一個元組
  • Django 1.10中文文檔-聚合
    這個主題指南描述了如何使用 Django 的查詢來生成和返回聚合值的方法。整篇指南我們都將引用以下模型。這些模型用來記錄多個網上書店的庫存。aggregate() 是 QuerySet 的一個終止子句,意思是說,它返回一個包含鍵值對的字典。 鍵的名稱是聚合值的標識符,值是計算出來的聚合值。鍵的名稱是按照欄位和聚合函數的名稱自動生成出來的。
  • django入門:數據模型
    test category, id__lt=10)c_test = Category.objects.filter(id__range=[0, 10])# 還可以使用 startswith,istartswith, endswith, iendswith 等條件# .values() 和 .values_list() 區別# .values() 取出某一列,每個元素是一個字典
  • Django第二十八課
    這裡大概有兩種方法:一是繼承django的用戶模型;二是使用新的模型拓展關聯User(🌟🌟🌟🌟🌟)。1. 繼承Django的用戶模型我們之前使用的User是在django.contrib.auth.models中引用的,我們可以查看這部分源碼,分析這個User是如何創建的。
  • 一篇文章帶你了解Django Form組件(入門篇)
    本次咱們來get一個新技能,Form組件。Form組件主要用於驗證表單數據。為什麼需要Form組件注:Form組件,只適用於,前後端未分離的項目中,主要用於驗證表單數據,所以,關鍵字是表單!!!比如像嗶哩嗶哩的註冊界面。
  • Django官方為什麼沒有標準項目結構
    帶短橫線的根目錄分享一個踩坑經驗,有時候我們想把項目名命名為帶短橫線的,如 hello-world,通過命令直接創建會報錯:...它是支持的,只是我們漏了一個參數。startproject的完整格式為django-admin startproject name [directory],可以在後面追加一個目錄參數:...\> django-admin startproject helloworld hello-world就可以了。
  • 向Django Admin添加圖表
    擴展 django-adminDjango後臺管理應用程式由ModelAdmin類組成。這些表示後臺管理界面中模型的可視視圖。默認情況下,一個ModelAdmin類有5個默認視圖:當你想要查看一個特定的模型時,ChangeList視圖是默認的後臺管理視圖。
  • Django入門學習教程
    本文 pdf 下載連結基礎部分須知:1.HttpResponse 返回字符串2.Render 返回一個Html文件3.Redirect 重定向創建Django項目綜合案例部分這個案例是一個管理系統:有學生表、班級表、教師表,班級與教師的關係表,對上面四張表進行操作,完成前端網頁和後端處理,通過本案例熟悉Django項目的編程。
  • Django第十八課
    在read_count/utils.py中新建一個get_today_hot_data方法,先通過content_type以及date進行過濾,獲取當日博客的閱讀數,然後進行按照閱讀數降序排列。需要注意,得到的read_details是一個QuerySet,可以通過對其切片獲取排名靠前的若干條博客。
  • python程式設計師嘔心瀝血整理 Django 優秀資源大全
    django-allauth, star:3000 - 一套完整的 Django 應用,解決認證,註冊,帳戶管理及第三方(社交)帳戶認證。django-organizations, star:338 - Django 項目的多用戶帳戶功能。
  • 5個必讀常用的Django小技巧 by 搬運工大江狗
    創建DateTimeField欄位時使用auto_now_add和auto_now選項當你在給一個模型創建一個DateTimeField類型的欄位時,你可以設置auto_now_add=True和auto_now=True的選項。這樣當你創建或更新一個時間欄位時就不用手動指定或更新時間了。
  • 使用Python進行網站開發入門指南
    以一個博客網站為例,講解了基於django框架完成網站開發的全過程,通過本文的學習,讀者就可以快速掌握使用django完成網站開發的方法。本文有別於其他教程:網上大量django教程都非常全面,但是我們使用django開發一個中小型網站的時候,有許多東西並不會立即用到,所以可以暫時不用管它,本文就從這個點出發,抓住核心要點,讓大家在最短的時間內開發一個網站出來,然後再逐漸完善和發展,而不是要一口氣做一個大型系統。
  • Django Form表單API詳解
    Form表單檢查數據綁定在《Django表單系統初體驗》中我們使用類的方式創建了一個登陸表單,並在視圖函數中,通過是實例化類對象,成功的創建了一張用戶登錄表單。如果你有一個綁定的 Form 實例,但是你想更改數據或者你想給一個未綁定的 Form 表單綁定一些數據,此時你需要創建一個新 Form 實例。因為 Form 實例一旦創建,它的數據將不可變。那麼各位小夥伴可以試一試,如果傳遞的是個空字典又會怎麼樣呢?猜一猜它的返回值是 True 還是 False 呢?
  • 「原創」Django第六章、模型操作
    相信大家都是抱著學習Django的目的來看這一套入門筆記,我就不敢再各位資料庫大佬們面前班門弄斧了,直接進入本章學習了。sqlite> .tablesauth_group blog_blogarticlesauth_group_permissions django_admin_logauth_permission django_content_type