專案建立好,現在可以動手寫Quiz App了。
Project跟app的關係就像是,假設現在進到一家保險公司的網站,你既可以在網站上買保單,也可以申請理賠,一個網站不只提供單一功能。Django讓我們可以在project下面管理多個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,今天只有空寫個大概,其實了解這些函式誕生的背後原因蠻有趣的。