iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 4
0
Modern Web

From Django 1.11 to Django 2.1 系列 第 4

Day4 : 打造Apps跟Django say hello!

  • 分享至 

  • xImage
  •  

今天要來介紹 Django 的 app!!

你可能會懷疑,為什麼是叫 app,畢竟看到 app 最直觀的想法是 應用程式,但是這麼想其實是有偏差的,畢竟App的原意是一項應用,各式各樣的技術也會產出不同的應用,所以被稱作 應用程式,也不能說它錯拉 ^^"

那這個 apps 跟Day3講到的 project有什麼關聯性?

What’s the difference between a project and an app?
An app is a Web application that does something – e.g., a Weblog system, a database of public records or a simple poll app. A project is a collection of configuration and apps for a particular website. A project can contain multiple apps. An app can be in multiple projects.

根據上述所法,我們可以知道 app 在 Django 代表的是一個網站的應用,這樣講太中式翻譯了!
其實一個 app 所代表的就是一項功能,根據功能的差異來分類app, e.g. 登入功能、點餐功能 ...等等
而我們的專案,裡面就會包含各式各樣的功能,雖然 apps 只是我們專案中一部份的內容,但是在Django中,這些 apps的架構都劃分的相當清楚!

Django comes with a utility that automatically generates the basic directory structure of an app, so you can focus on writing code rather than creating directories.

從上面那一句話我們可以明白,Django 很貼心地幫我們完成了小細節的部分,我們只要專注在商業邏輯的撰寫即可^^

那 Django 的 app 要怎麼建呢? 其實就跟 project 一樣簡單!
python manage.py startapp [app_name]

後方的 [app_name] 只是一個示意 ^^",不是要你們跟著我打[app_name]

講到這裡,想要分享一個概念

除非是官方正式的Docs,不然千萬不要別人說一句就照打一句,你要盡可能的去思考,這一行指令,背後的用意何在! 有時候官方寫的可能還會有錯(這發生機率很小,但就是有遇到過Q

Anyway,題外話

這裡我先建立一個**歡迎(welcome)**功能的 app

(ithome_enve) C:\Users\User\Desktop\ithome\ithome>python manage.py startapp welcome
(ithome_enve) C:\Users\User\Desktop\ithome\ithome>tree /F ..

ithome
│   ├───ithome
│   └───welcome
│       │   admin.py
│       │   apps.py
│       │   models.py
│       │   tests.py
│       │   views.py
│       │   __init__.py
│       │
│       └───migrations
│               __init__.py
│ (省略部分內容....)

在創建好 app welcome,可以發現裡面有六個檔案及一個資料夾,分別是

  • admin.py : 設定資料庫呈現的模式,之後會跟models溝通
  • models.py : 建構你的資料庫型態
  • tests.py : 這是拿來檢查商業邏輯的地方,也就是用來測試你的邏輯是否有遺漏,這裡我們沒有要討論太多這方面的議題,但是你要記住,寫測試是一件相當重要的事情,千萬不能小看使用者的潛能
  • views.py : 相信你還沒有忘記,在 Day1我們這一位擔任控制者(controller)的身分,沒錯! 它就是寫商業邏輯的地方,它會跟urls.py做呼應,並將所需傳達給前端
  • urls.py : 它擔任著橋樑的角色,讓views.py與相對的網站做對應。蛤? 你說怎麼沒見到 urls.py,因為我們要自己建阿^^,在這裡建議可以把內部 ithome的urls.py複製貼過來就好,但是內容要修改!! 待會再來說明修改的部分
  • apps.py : 這裡你只要先了解,這是用來區別app的一個檔案即可
  • init.py : 相信大家都還沒有忘記^^,就是告訴Python這資料夾是個套件
  • migrations : 這資料夾裡面存放的內容,記錄著models裡面所創建的資料庫型態,這部分後面會詳談

介紹完所有app裡面所包含的檔案,我覺得再過不久,你就能慢慢察覺到 Django MVT的精神所在 ^^

我們先試著跟 Django 打聲招呼吧! 打開views.py (在這,我是使用 Sublime 當作編輯器,至於要使用什麼編輯器,純粹是依照各自的需求跟喜好,沒有絕對^^

我們先一起來修改 welcome\views.py
https://ithelp.ithome.com.tw/upload/images/20181004/201118298B6UCsJJ1g.jpg

接著,我們將 ithome\urls.py複製到 welcome\ 資料夾下,並將裡面的內容修改如下
https://ithelp.ithome.com.tw/upload/images/20181004/20111829cFRN9XQqOE.jpg

因為上面的是針對welcome裡的url做對應(類似區域性概念),我們也要對廣域的ithome裡的urls.py做修改
https://ithelp.ithome.com.tw/upload/images/20181004/20111829ft90tX6Gsq.jpg

include 概念就是,它會將 weclome.urls 下的所有 url 前面都冠上 welcome/的意思,這樣子你才不會說在 welcome.urls 裡的每一個 url都要加上 welcome/,這樣多累阿 ^^"

完整的式意圖如下 :
https://ithelp.ithome.com.tw/upload/images/20181004/20111829UbDniEKO5n.jpg

這樣整個架構都建好了,接下來我們來 run 看看結果吧! 應該還沒忘記指令吧 ^^
python manage.py runserver

預設是空畫面是正常的,因為預設畫面本來就還沒有設定囉!
所以只要將網址後面加上 /welcome/ 即可!
https://ithelp.ithome.com.tw/upload/images/20181004/201118291SgoTyBvnm.jpg

大功告成!!

呼,希望上面的式意圖能讓你大致上了解整個架構是怎麼兜起來的 ^^

那今天就先醬拉,明天見~

學海無涯,回頭是岸,不進則退,至少希望明天的自己都能比今天多了解一些知識 From BY


上一篇
Day3 : 建置Project
下一篇
Day5 : Django 資料庫的概念
系列文
From Django 1.11 to Django 2.1 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

0
Benny
iT邦新手 5 級 ‧ 2019-05-07 18:17:38

BY 您好 請問一下
我依照您的步驟執行但我載
ithome\urls.py 下
若使用以下
urlpatterns = [
path('welcome/',include('welcome.urls')),
path('admin/',admin.site.urls),
]
則server 就無法run 會出現許多標籤錯誤
而將 #path('welcome/',include('welcome.urls')),
註解就無法執行,請問是我哪裡出錯了

django.VERSION
(2, 2, 1, 'final', 0)

Python 3.7.1

wei099063 iT邦新手 5 級 ‧ 2019-07-12 16:02:25 檢舉

使用path.include函數前要import include

0
vade
iT邦新手 5 級 ‧ 2023-03-01 04:13:40

請問如何將 ithome\urls.py複製到 welcome\ ??
卡在這裡好久

我要留言

立即登入留言