1. 程式人生 > >【第一部分-django論壇從搭建到部署】一個完整的Django入門指南學習筆記

【第一部分-django論壇從搭建到部署】一個完整的Django入門指南學習筆記

前沿

教程材料一共會被分為七個部分。
此教程將從安裝、開發環境的準備,模型,檢視,模板,URL到更高階的主題(如遷移,測試和部署)中詳細探討所有基本概念。

安裝

公眾號裡邊的是Mac下的教程,我的系統是win,這也是為啥我做這個筆記的原因之一。基本的設定包括安裝PythonVirtualenvDjango

這裡寫圖片描述

使用虛擬環境,可以讓開發的每個專案都會有其獨立的環境。這樣的話,包之間的依賴關係不會發生衝突。同時也使得我們能在不同Django版本上執行的本地機器的專案。安裝python2和3的話可以參考百度,百度是個好東西,在這裡不做贅述。a

安裝Virtualenv

通過pip3(因為我安裝了python2和3,所以把python3的pip改成pip3,為了避免使用衝突)來安裝Virtualenv。在cmd中,執行:

pip3 install virtualenv

這裡寫圖片描述

到目前為止,我們執行的安裝都是在作業系統環境下執行的。從現在開始,我們安裝的所有東西,包括django本身,都將安裝在虛擬環境中。

可以這樣理解:對於你開始的每個Django專案,你首先會為它建立一個虛擬環境。這就像每個Django專案都有一個沙盒。所以你隨意執行,安裝軟體包,解除安裝軟體包而不會破壞任何東西。

接著我們建立一個名為Development的資料夾。然後用它來組織我所有的專案和網站。接著在其中建立一個專案名稱為myproject的資料夾。

這裡寫圖片描述

這個資料夾是級別較高的目錄,將儲存與我們的Django專案相關的所有檔案和東西,包括它的虛擬環境。

myproject資料夾中執行:

virtualenv venv

這裡寫圖片描述

這樣虛擬環境就建立好了。接著我們啟用環境,執行:

venv\Scripts\activate

如果看到命令列前面有(venv),就代表啟用成功,如下圖。

這裡寫圖片描述

myproject資料夾中,我們通過上述步驟建立了一個名為venv的特殊資料夾。該資料夾內包含了一個python的副本。在我們激活了venv環境之後,當我們執行python命令時,它將使用我們儲存在venv裡面的本地副本,而不是我們之前在作業系統中安裝的那個。

另外一個要強調的是,pip程式也已經安裝好了。當我們使用它來安裝Python的軟體包(比如Django)時,它將被安裝在venv

環境中。

請注意,當我們啟用venv時,我們將使用命令python(而不是python3)來呼叫Python 3.6.2,並且僅使用pip(而不是pip3)來安裝軟體包。

順便說一句,要想退出venv環境,執行下面的命令:

deactivate

但是我們現在需要保持啟用狀態來進行下一步!

安裝Django 1.11.7

在啟動了venv的前提下,執行一下命令安裝django:

pip install django==1.11.7

如果使用pip install安裝庫比較慢,可以用豆瓣的映象:

pip install django==1.11.7 -i http://pypi.douban.com/simple –trusted-host pypi.douban.com

這裡寫圖片描述

現在一切準備就緒!

建立第一個專案

啟動一個新專案,執行下面的命令來建立一個新的 Django 專案:

django-admin startproject myproject

命令列工具django-admin會在安裝Django的時候一起自動安裝好。執行了上面的命令以後,系統會為Django專案生成基礎資料夾結構。現在,我們的myproject目錄結構如下所示:

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 應用

在Django的哲學中,我們有兩個重要的概念:
- app:是一個可以做完成某件事情的Web應用程式。一個應用程式通常由一組models(資料庫表),views(檢視),templates(模板),tests(測試) 組成。
- project:是配置和應用程式的集合。一個專案可以由多個應用程式或一個應用程式組成。

請注意,如果沒有一個project,你就無法執行Django應用程式。像部落格這樣的簡單網站可以完全在單個應用程式中編寫,例如可以將其命名為blogweblog

這裡寫圖片描述

這是組織原始碼的一種方式。現在剛開始,判斷什麼是或不是應用程式這些還不太重要。包括如何組織程式碼等。現在不用擔心那些問題!首先讓我們對Django的API和基礎知識進行梳理一遍。

好的!那麼,為了方便說明,我們來建立一個簡單的網路論壇或討論區。要建立我們的第一個應用程式,請跳轉到manage.py檔案所在的目錄並執行以下命令:

django-admin startapp boards

注意!我們這次使用的命令是startapp
通過這條指令,系統會給我們建立以下目錄結構:

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的配置檔案。
- apps.py:這是應用程式本身的配置檔案。
- models.py:這裡是我們定義Web應用程式資料例項的地方。models會由Django自動轉換為資料庫表。
- tests.py:這個檔案用來寫當前應用程式的單元測試。
- views.py:這是我們處理Web應用程式請求(request)/響應(resopnse)週期的檔案。

現在我們建立了我們的第一個應用程式,讓我們來配置一下專案以便啟用這個應用程式。
要做到這一點,開啟settings.py並嘗試找到INSTALLED_APPS變數:

settings.py

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檔案,並新增以下程式碼:

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檔案中完成:

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

這裡寫圖片描述

按照上述步驟就可以你的第一個檢視!

這是本系列教程的第一部分。在本教程中,我們學習瞭如何安裝最新的Python版本以及如何設定開發環境。我們還介紹了虛擬環境,開始了我們的第一個django專案,並已經建立了我們的初始應用程式。

第二部分將涉及模型,檢視,模板和URLs。我們將一起探索Django所有的基礎知識!

為了保持學習過程中頁面同步,在原作者Github上提供了原始碼。這個專案的當前狀態可以在release tag v0.1-lw下找到。下面是直達連結:

**PS:與公眾號不一樣的是,這個不是Mac版本,是Win版本