iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 4
1

專案建立好,現在可以動手寫Quiz App了。

Project跟app的關係就像是,假設現在進到一家保險公司的網站,你既可以在網站上買保單,也可以申請理賠,一個網站不只提供單一功能。Django讓我們可以在project下面管理多個app,這樣在架構較為龐大而複雜的網站時,多管齊下不是問題。

建立Quiz App

在Terminal鍵入下列後即可在mysite專案下建立一個叫quiz的app:

python manage.py startapp quiz

執行完後他會產生一個quiz的資料夾及下面這些檔案:

quiz/
    migrations/
        __init__.py
    __init__.py
    admin.py
    apps.py
    models.py
    tests.py
    views.py

Django的架構模式是由Models、Views及Template所組成,我們在models.py寫資料儲存的模型,在views.py撰寫邏輯,在template可以放置.html,但現在還看不到template的資料夾,這需要自己手動增加,而且template不會放在app裡面。

第一個網頁

先在views撰寫網頁邏輯:

*quiz/views.py*
from django.http import HttpResponse

def index(request):
    return HttpResponse("Hello, world. You're at the quiz index.")

既然寫好了一個功能,那怎麼把它具象化變成我們想像中的樣子,首先在quiz底下新增urls.py,這邊可以先複製mysite的url.py內容貼過來,再修改如下,path()有4個參數,必要的有url及views。

*quiz/urls.py*
from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),
]

除了在app的url.py作配置,我們還要再來到project底下的url.py作配置:

**mysite/urls.py**
from django.contrib import admin
from django.urls import include, path
from quiz import as quiz_views

urlpatterns = [
    path('quiz/', quiz_views.index),
    path('admin/', admin.site.urls),
]

上面寫法沒問題,但你可以想到的是,這樣每當在app新增一個功能,你就要作兩次的url設定,這邊其實可以透過Django的函式include()簡化這個作法:

**mysite/urls.py**
....省略...
urlpatterns = [
    path('quiz/', include('quiz.urls')),
    path('admin/', admin.site.urls),
]

執行下面命令,來看看我們有沒有成功:

python manage.py runserver

執行完點選 http://127.0.0.1:8000/ ,找不到網頁是正常,先跳到http://127.0.0.1:8000/quiz ,就可以看到畫面了。

明天想再繼續講path跟include,今天只有空寫個大概,其實了解這些函式誕生的背後原因蠻有趣的。


上一篇
建立Django專案
下一篇
Django URLconfs
系列文
Django案例實作之踩坑全記錄34
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言