Django基礎教程之工程搭建

SilenceHL 發表於 2021-04-05

宣告:以下內容均為我個人的理解,如果發現錯誤或者疑問可以聯絡我共同探討

本教程為Django基礎教程系列第二篇,前面篇章在以下連結:

Django基礎教程之Django介紹

簡介

每個工程專案的開始階段往往決定了專案的大致走向,在工程搭建的過程中要為後面的專案開發做好準備。

為了不受Python環境的影響,最好建立虛擬環境,在虛擬環境中搭建專案

教程

安裝環境

安裝virtualenv

virtualenv是一個用於建立Python虛擬環境的工具包,可以通過pip直接安裝

pip3 install virtualenv

建立虛擬環境

virtualenv --python=/usr/bin/python3 django2.2.2_py3

django2.2.2_py3為虛擬環境的名字,這裡是以Django的版本+Python版本命名,–python指定了Python的位置。

啟用虛擬環境

source django2.2.2_py3/bin/activate

啟用完成後會在命令列最前面顯示當前的虛擬環境名

安裝Django

本教程使用django2.2.2版本

pip install django==2.2.2

專案工程

在Django中,專案的工程目錄可以通過Django提供的命令來建立。

建立

建立工程的命令為:

django-admin startproject 工程名稱

例如你想在做麵食建立一個demo的工程專案,可以執行如下命令:

cd ~/Desktop/
django-admin startproject demo

執行完畢後,會在當前目錄即Desktop目錄下生成一個名為demo的目錄,該目錄存放著整個Django工程

工程目錄說明

檢視建立的工程目錄,結構如下

(django2.2.2_py3) ~/Desktop/demo$ tree
.
|-- demo
|   |-- __init__.py
|   |-- settings.py
|   |-- urls.py
|   `-- wsgi.py
`-- manage.py

1 directory, 5 files
  • demo:與專案同名的目錄,存放專案相關檔案。
  • settings.py:專案的配置檔案。
  • urls.py:專案的總URL配置檔案。
  • wsgi.py:專案與WSGI相容的Web伺服器入口。
  • manage.py 專案管理檔案,通過它管理專案,同時也是啟動專案的入口。

執行開發伺服器

在開發階段,為了能夠快速預覽到開發的效果,Djnago提供了一個純python編寫的輕量級web伺服器,提供開發階段使用。

執行伺服器命令如下:

python manage.py runserver

預設IP是127.0.0.1,預設埠為8000,可以寫指定IP與埠,格式為:ip:埠

啟動後可以看到以下資訊

(django2.2.2_py3) ~/Desktop/demo$ python manage.py runserver
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).

You have 17 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.

February 17, 2019 - 05:29:56
Django version 2.2.2, using settings 'demo.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

在瀏覽器中輸入網址“127.0.0.1:8000”便可看到效果。

Django基礎教程之工程搭建

  • django預設工作在調式Debug模式下,如果增加、修改、刪除檔案,伺服器會自動重啟。
  • 按ctrl+c停止伺服器。

應用

在Web開發中通常一個大型專案是由無數個應用構成的。將開發中的工程專案拆分成不同的功能模組,可以讓各功能模組之間保持相對獨立,更利於我們開發與管理。

建立

Django為我們提供了建立應用的命令,建立應用的命令為:

python manage.py startapp 子應用名稱

需要注意的是,建立應用時必須在manage.py所在的目錄下

現在建立一個使用者相關的應用users,可以執行:

python manage.py startapp users

執行後,可以看到工程目錄中多出了一個名為users的子目錄。

應用目錄說明

(django2.2.2_py3) ~/Desktop/demo$ ls
db.sqlite3  demo  manage.py  users
(django2.2.2_py3) ~/Desktop/demo$ tree
.
|-- db.sqlite3
|-- demo
|   |-- __init__.py
|   |-- __pycache__
|   |   |-- __init__.cpython-36.pyc
|   |   |-- settings.cpython-36.pyc
|   |   |-- urls.cpython-36.pyc
|   |   `-- wsgi.cpython-36.pyc
|   |-- settings.py
|   |-- urls.py
|   `-- wsgi.py
|-- manage.py
`-- users
    |-- __init__.py
    |-- admin.py
    |-- apps.py
    |-- migrations
    |   `-- __init__.py
    |-- models.py
    |-- tests.py
    `-- views.py

4 directories, 17 files
  • admin.py:後臺管理配置資訊。
  • apps.py:配置資訊。
  • migrations 存放資料庫遷移歷史檔案。
  • models.py:儲存資料庫模型類。
  • tests.py:用於開發測試用例,編寫單元測試。

註冊應用

建立完應用後Django並不能自動將專案與應用聯絡起來,需要我們在工程配置檔案settings.py中註冊才能使用。

在工程配置檔案settings.py中的INSTALLED_APPS項負責註冊安裝好的應用,初始工程中的INSTALLED_APPS如下:

Django基礎教程之工程搭建

這些預設應用的作用可以看這篇文章:Django配置檔案詳解

註冊一個應用的方法是將應用的配置資訊檔案apps.py中的Config類新增到INSTALLED_APPS列表中。

例如,註冊剛建立的users應用,可在INSTALLED_APPS列表中新增‘users.apps.UsersConfig’

Django基礎教程之工程搭建

建立檢視

檢視用於編寫應用的業務邏輯,Django的檢視是在應用中views.py中的

進入users應用,在views.py中編寫檢視程式碼。

from django.http import HttpResponse

def index(request):
    """
    檢視index
    :param request: 包含了請求資訊的請求物件
    :return: 響應物件
    """
    return HttpResponse("hello Django")

說明:

Django基礎教程之Django介紹中提到過,Django中檢視的功能是接受請求,進行業務處理,返回響應。在這裡request是接受請求的物件,業務處理是生成hello Django字串,而HttpResponse是返回響應的物件。

路由

什麼是路由

在Django中,路由是將請求的URL分發給檢視的系統。

路由定義的位置

一般情況下會有兩種路由定義的位置,一種是專案工程的urls.py中,一種是每個應用下的urls.py中。專案工程的urls.py是Django解析路由的入口

路由解析順序

Django在接收到請求時會先從專案工程urls.py中的urlpatterns列表中從上至下的順序查詢對應路由規則,如果發現規則為include包含,則再進入被包含的urls中的urlpatterns列表由上至下進行查詢。

路由命名

在定義路由的時候,可以為路由命名,方便查詢特定檢視的具體路徑資訊。

  • 在定義include函式定義路由時,可以使用namespace引數定義路由的名稱空間,如

    url(r'^users/', include('users.urls', namespace='users')),

    名稱空間表示,凡是users.urls中定義的路由,均屬於namespace指明的users名下。

    名稱空間的作用:避免不同應用中的路由使用了相同的名字發生衝突,使用名稱空間區別開。

  • 在定義普通路由時,可以使用name引數指明路由的名字,如

    urlpatterns = [
        url(r'^index/$', views.index, name='index'),
    ]

路徑結尾斜線的說明

Django中定義路由時,通常以斜線結尾,其好處是使用者訪問不以斜線結尾的相同路徑時,Django會把使用者重定向到以斜線/結尾的路徑上,而不會返回404不存在。如

urlpatterns = [
    url(r'^index/$', views.index, name='index'),
]

使用者訪問 index 或者 index/ 網址,均能訪問到index檢視。

雖然路由結尾帶斜線能帶來上述好處,但是卻違背了HTTP中URL表示資源位置路徑的設計理念。具體是否結尾帶斜線以個人風格為準。

接下來我們要通過路由將工程->應用->檢視給聯絡起來

首先在工程的總路由中新增users應用的路由資訊

from django.contrib import admin
+ from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
 +  path('users/', include('users.urls')),
]

說明:

  • ‘users/‘表示所有/users/開頭的請求
  • include表示以/users/匹配到users應用中urls.py的所有路由,即只要請求的URL是/users/開頭都會去users應用中的urls.py中匹配剩下的路由。

將總路由引到users應用後,需要修改users應用中urls.py的資訊

from django.conf.urls import url,re_path

from . import views

# urlpatterns是被django自動識別的路由列表變數
urlpatterns = [
        # re_path是通過正規表示式來構造路由
      # re_path(路由正規表示式,檢視)
    re_path(r'^index/$', views.index),
]                                                              

說明:

  • 現在完整的請求url為:/users/index/

路由修改完成後,重啟Django程式,就可以在瀏覽器中看到返回的資訊了

本作品採用《CC 協議》,轉載必須註明作者和本文連結