跳到主要內容

[Django教學2]建立Django應用程式(APP)

Photo by Nick Morrison on Unsplash
3步驟快速安裝Django網站框架文章中,瞭解Django的基本架構,並且安裝完成後,本文將帶大家建立Django專案中的第一個應用程式(APP),接著藉此說明Django框架的執行生命週期,瞭解其中的運作方式。

本文建立posts應用程式(APP)為例,用來顯示使用者所建立的貼文,就像FacebookInstagram的首頁那樣。大家可以依需求,跟著教學,建立屬於自己的Django專案應用程式(APP)
  • 建立Django應用程式(APP)
  • Django MTV模式
  • Django應用程式網址(Url)
  • Django應用程式檢視函式(View Function)

一、建立Django應用程式(APP)

首先,使用Visual Studio Code開啟Django專案,在Terminal視窗中,輸入以下指令來建立應用程式(APP)

python manage.py startapp posts

這時候就可以在專案中,看到Django框架所建立的應用程式(APP),如下圖:
其中的檔案功能,簡單說明如下:
  • migrations - 記錄資料庫與models.py中的欄位同步歷程。
  • __init__.py - 這個檔案顯示了Django的每個應用程式(APP),事實上就是Python套件(Package)
  • admin.py - 可以用來定義或客製化這個應用程式(APP)Django後台(Django Administration)的欄位顯示方式。
  • apps.py - 這個Django應用程式的設定檔。
  • models.py - 定義Django應用程式的資料庫欄位。
  • tests.py - 能夠撰寫Django應用程式的自動化測試腳本。
  • views.py - 負責接收瀏覽器的請求,進行邏輯的處理後,回傳執行結果給瀏覽器。
2020/07/23補充說明
而為了讓Django專案主程式(potrip)知道應用程式(posts)的存在,就需要開啟settings.py設定檔,在INSTALL_APPS的地方將應用程式(posts)進行加入的動作,如下範例
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
	
    'posts.apps.PostsConfig'  #應用程式的設定檔類別
]

二、Django MTV模式

瞭解Django應用程式(APP)的基本架構後,接著來看一下Django框架的運作方式,如下圖:
從圖中可以看到,當使用者透過瀏覽器存取應用程式(APP)的網址後,Django會進行網址的對應動作,從urls.py檔案中,找到網址所對應的檢視函式(View Function),接著在檢視函式(View Function)中進行商業邏輯的運算,或利用models.py存取資料庫。最後,將執行結果回傳給瀏覽器。

另外,如果要回傳一個網頁給瀏覽器,則可以透過樣板(Template)的方式,在其中設計網頁的畫面,傳給瀏覽器顯示。而Django框架這樣的運作模式就稱為MTV(Model-Template-View)

三、Django應用程式網址(Url)

為了要讓使用者能夠存取到Django中的應用程式,就需要定義它的網址。首先,在posts應用程式資料夾下,新增urls.py,接著即可在其中定義網址,如下範例:
from django.urls import path
from . import views  #引用這個資料夾中的views檔案

urlpatterns = [
    path('', views.index, name = "Index")
]
特別注意,urlpatternsDjango框架定義的關鍵字,所以命名必須一模一樣。並且urlpatterns是一個串列(List),也就是說,一個應用程式(APP)可以根據不同的頁面,各自設定不同的網址型式。

2020/07/23補充說明
到這邊會發現有紅色毛毛蟲的錯誤,是因為目前在views.py檔案中,還沒有index檢視函式(View Function),等一下建立後,就不會發生錯誤了。

從以上範例可以看到第一個網址參數設定空白,是因為想要的網址為http://127.0.0.1:8000/posts/,如果想要的網址是http://127.0.0.1:8000/posts/overview,則可以設定如下範例:
from django.urls import path
from . import views  #引用這個資料夾中的views檔案

urlpatterns = [
    path('overview', views.index, name = "Index")
]
Django執行流程圖可以知道,當使用者存取應用程式的網址後,需要對應到一個檢視函式(View Function)來進行處理,所以第二個參數需設定views.py中的檢視函式(View Function)名稱(index),最後,進行此網址的命名(可有可無,但命名可提高未來的維護性)。

應用程式(APP)的網址定義完成後,接下來就要註冊到Django專案主程式(potrip),讓它知道有posts這個應用程式(APP)的存在。

而註冊的方式就是開啟專案主程式potrip資料夾下的urls.py檔案,將posts應用程式(APP)的網址新增至urlpatterns中,如下範例:
potrip/urls.py
from django.contrib import admin
from django.urls import path, include  # 引用include函式

urlpatterns = [
    path('admin/', admin.site.urls),
    path('posts/', include('posts.urls')) #新增應用程式的網址
]
從範例可以看到,透過include函式,即可將應用程式(APP)中的所有網址註冊到Django專案主程式(potrip)中,當使用者存取http://127.0.0.1:8000/posts/開頭的網址時,Django就知道要去找posts應用程式(APP)中的網址。Django框架就是透過這樣的方式,整合專案中所有的應用程式(APP)

四、Django應用程式檢視函式(View Function)

應用程式的網址註冊完成後,接著開啟views.py來撰寫對應的檢視函式(View Function),如下範例:
from django.shortcuts import render
from django.http.response import HttpResponse

# Create your views here.
def index(request):
    return HttpResponse("My First Django App.")   
檢視函式(View Function)其實就是Python的函式(Function),但是必須要有request參數。而回傳給瀏覽器的內容須引用HttpResponse類別,這邊示範單純回傳一個字串給瀏覽器。

最後,開啟Visual Studio CodeTerminal視窗,執行本地端伺服器的指令,如下範例:

python manage.py runserver

開啟瀏覽器,輸入執行結果中的網址(http://127.0.0.1:8000/),可以看到如下畫面:
不用擔心,這是正常的結果,未來會說明其中的原理。但是將網址修改為應用程式的網址(http://127.0.0.1:8000/posts/),則可以看到如下畫面:
當存取http://127.0.0.1:8000/posts/網址時,Django會尋找posts應用程式(APP)的urls.py中,urlpatterns為空白的對應檢視函式(View Function),接著執行views.py中的index檢視函式(View Function),回傳字串給瀏覽器。

五、小結

以上透過建立Django應用程式(APP)的過程,來讓大家瞭解其中的運作觀念,如果在實作的過程中有碰到任何問題,歡迎留言提問,我將會盡力為大家解答。

如果您喜歡我的文章,請幫我按五下Like(使用GoogleFacebook帳號免費註冊),支持我創作教學文章,回饋由LikeCoin基金會出資,完全不會花到錢,感謝大家。

有想要看的教學內容嗎?歡迎利用以下的Google表單讓我知道,將有機會成為教學文章,分享給大家😊

你可能有興趣的文章









留言

  1. 您好 謝謝您分享的文章
    我按照步驟建立了步驟 但是無法 import views
    會報錯 cannot import name 'views'

    請問這是發生了什麼問題呢?

    回覆刪除
    回覆
    1. 您好:
      首先要確認資料夾中是否有views.py檔案,接著在urls.py中,一定要使用「from . import views」的方式來進行引用,並且在views.py檔案中,要有urlpatterns中所存取的檢視函式(View Function)。以本文來說的話,就是views.py檔案中,要有index這個檢視函式(View Function)。

      若還是無法解決的話,歡迎將問題截圖後,至我的粉絲專頁(learncodewithmike)私訊我,來幫您解決 :)

      刪除
  2. 您好感謝您的分享
    我跟著步驟做可是出現這個
    不知道是什麼問題
    Requested setting INSTALLED_APPS, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.

    謝謝

    回覆刪除
    回覆
    1. 您好,請您確認settings.py檔案中,INSTALL_APPS的地方是否有依照本文正確設定,並且專案主程式及應用程式(APP)下的urls.py檔案皆需依照本文進行設定,最後,利用python manage.py runserver指令跑起來,在瀏覽器的地方輸入http://127.0.0.1:8000/(應用程式網址)即可。

      希望以上有解決您的問題,若還有其他疑問,歡迎至我的粉絲專頁(learncodewithmike)私訊我,來協助您解決 :)

      刪除
  3. You're seeing this error because you have DEBUG = True in your Django settings file. Change that to False, and Django will display a standard 404 page.

    回覆刪除
    回覆
    1. 您好,如果您的瀏覽器網址為http://127.0.0.1:8000/,看到這樣的訊息是正確的,文章中有進行說明,要看到應用程式(APP)的頁面,網址應該要是http://127.0.0.1:8000/(應用程式網址),這時候還是看到這樣的錯誤訊息,可能就要檢查一下您專案主程式及應用程式(APP)下的urls.py檔案是否有依照本文進行設定。

      希望以上有解決您的問題,若還有其他疑問,歡迎至我的粉絲專頁(learncodewithmike)私訊我,來協助您解決 :)

      刪除
  4. 分享一下我操作時遇到的問題和找到解決的方法~謝謝版主分享。

    做到 一、建立Django應用程式(APP) 裡面 2020/07/23 補充說明這邊時,像我命名為breastfeeding_room_radar,要加入的字串就要改成'breastfeeding_room_radar.apps.BreastfeedingRoomRadarConfig'。(字首大寫、底線去掉、底線後第一個字改大寫)

    一開始我是輸入breastfeeding_room_radar.apps.Breastfeeding_room_radarConfig

    回覆刪除
  5. 感謝您讓我體驗到我第一個Django app

    回覆刪除
  6. 您好,我按照您的方式執行from . import views後,出現以下的錯誤:ImportError: attempted relative import with no known parent package。我的資料夾中有views.py檔案,在views.py檔案中,也輸入的index這個檢視函式(View Function)。不知為何還會出錯?

    註:我用sys.path.append()新增路徑後再執行import views就成功。但於本地端伺服器執行python manage.py runserver出錯:[WinError 123] 檔案名稱、目錄名稱或磁碟區標籤語法錯誤。: ''

    回覆刪除
  7. PS C:\Users\Tsai\potrip> python manage.py startapp posts
    C:\Python39\python.exe: can't open file 'C:\Users\Tsai\potrip\manage.py': [Errno 2] No such file or directory
    PS C:\Users\Tsai\potrip>

    不好意思請問一下說如果在執行建立app那邊出現這個訊息 我有哪邊設定是有問題的

    回覆刪除

張貼留言