Photo by Nick Morrison on Unsplash
在3步驟快速安裝Django網站框架文章中,瞭解Django的基本架構,並且安裝完成後,本文將帶大家建立Django專案中的第一個應用程式(APP),接著藉此說明Django框架的執行生命週期,瞭解其中的運作方式。
本文建立posts應用程式(APP)為例,用來顯示使用者所建立的貼文,就像Facebook或Instagram的首頁那樣。大家可以依需求,跟著教學,建立屬於自己的Django專案應用程式(APP)。
本文建立posts應用程式(APP)為例,用來顯示使用者所建立的貼文,就像Facebook或Instagram的首頁那樣。大家可以依需求,跟著教學,建立屬於自己的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)。
從圖中可以看到,當使用者透過瀏覽器存取應用程式(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")
]
特別注意,urlpatterns為Django框架定義的關鍵字,所以命名必須一模一樣。並且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,則可以設定如下範例:
從以上範例可以看到第一個網址參數設定空白,是因為想要的網址為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
應用程式(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 Code的Terminal視窗,執行本地端伺服器的指令,如下範例:
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(使用Google或Facebook帳號免費註冊),支持我創作教學文章,回饋由LikeCoin基金會出資,完全不會花到錢,感謝大家。
如果您喜歡我的文章,請幫我按五下Like(使用Google或Facebook帳號免費註冊),支持我創作教學文章,回饋由LikeCoin基金會出資,完全不會花到錢,感謝大家。
您好 謝謝您分享的文章
回覆刪除我按照步驟建立了步驟 但是無法 import views
會報錯 cannot import name 'views'
請問這是發生了什麼問題呢?
您好:
刪除首先要確認資料夾中是否有views.py檔案,接著在urls.py中,一定要使用「from . import views」的方式來進行引用,並且在views.py檔案中,要有urlpatterns中所存取的檢視函式(View Function)。以本文來說的話,就是views.py檔案中,要有index這個檢視函式(View Function)。
若還是無法解決的話,歡迎將問題截圖後,至我的粉絲專頁(learncodewithmike)私訊我,來幫您解決 :)
您好感謝您的分享
回覆刪除我跟著步驟做可是出現這個
不知道是什麼問題
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.
謝謝
您好,請您確認settings.py檔案中,INSTALL_APPS的地方是否有依照本文正確設定,並且專案主程式及應用程式(APP)下的urls.py檔案皆需依照本文進行設定,最後,利用python manage.py runserver指令跑起來,在瀏覽器的地方輸入http://127.0.0.1:8000/(應用程式網址)即可。
刪除希望以上有解決您的問題,若還有其他疑問,歡迎至我的粉絲專頁(learncodewithmike)私訊我,來協助您解決 :)
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.
回覆刪除您好,如果您的瀏覽器網址為http://127.0.0.1:8000/,看到這樣的訊息是正確的,文章中有進行說明,要看到應用程式(APP)的頁面,網址應該要是http://127.0.0.1:8000/(應用程式網址),這時候還是看到這樣的錯誤訊息,可能就要檢查一下您專案主程式及應用程式(APP)下的urls.py檔案是否有依照本文進行設定。
刪除希望以上有解決您的問題,若還有其他疑問,歡迎至我的粉絲專頁(learncodewithmike)私訊我,來協助您解決 :)
感謝教學
回覆刪除不客氣,希望有幫助到您 :)
刪除分享一下我操作時遇到的問題和找到解決的方法~謝謝版主分享。
回覆刪除做到 一、建立Django應用程式(APP) 裡面 2020/07/23 補充說明這邊時,像我命名為breastfeeding_room_radar,要加入的字串就要改成'breastfeeding_room_radar.apps.BreastfeedingRoomRadarConfig'。(字首大寫、底線去掉、底線後第一個字改大寫)
一開始我是輸入breastfeeding_room_radar.apps.Breastfeeding_room_radarConfig
感謝您讓我體驗到我第一個Django app
回覆刪除您好,我按照您的方式執行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] 檔案名稱、目錄名稱或磁碟區標籤語法錯誤。: ''
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那邊出現這個訊息 我有哪邊設定是有問題的