[part 1] 第一個 Django 應用程式

pardon110發表於2019-07-12

概述

本專案依據官網示例整理而成,專案由以下兩部分組成 。

  • 前臺展示,訪問者檢視民意調查並在其中投票
  • 後臺管理,允許您對調查結果進行增刪改

建立專案

使用框架命令工具 django-admin 建立專案目錄骨架

    pip install -U django
    python -m django --version

    django-admin startproject mysite
  • 專案結構

外層 mysite專案目錄,內層 mysite 應用目錄,manage.py 管理 Django 命令列互動

  mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        wsgi.py
  • 啟動web服務

進入專案目錄,以下三條命令皆可以開啟web服務
第一條命令,預設web服務訪問的埠是8000
第二條則指定是更改埠為8080,通常是在埠衝突的情況下使用
第三條意味著是可以通過區域網其他終端訪問本機的web服務,其0 是 0.0.0.0 廣播

    python manage.py runserver
    python manage.py runserver 8080
    python manage.py runserver 0:8000

建立應用

  • 專案(站點) vs 應用
    • web應用有資料庫儲存,weblog系統
    • 專案是一個包含特定站點應用和配置的集合
    • 一個專案包含多個應用,一個應用可以在多個專案中

換句話而言,由 django-admin 生成是專案(或站點),而由 python manage.py 建立為應用

    python manage.py startapp polls

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

建立檢視

  • polls/views.py
from django.http import HttpResponse
def index(request):
    return HttpResponse("Hello, world. You're at the polls index.")

配置UrlConf

  • 將應用的 urlconf 配置指向專案根 urlconf ,以便 Django 通過配置路由可以找到檢視
  • polls 資料夾下新增 urls 配置檔案 polls/urls.py 檔案 ,django.urls.include 函式匯入 url 配置
# polls/urls.py
from django.urls import path
from . import views

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

# mysite/urls.py
from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('polls/', include('polls.urls')),
    path('admin/', admin.site.urls),
]

重新啟用web服務python manage.py runserver
訪問 http://localhost:8000/polls/ 可見自定義檢視

附錄

  • django.urls.include 函式允許引入外部url配置,將 path 方法正則匹配到的url傳送到對映處理器
  • _path(route, view, kwargs=None, name=None, Pattern=None)
    • 該方法是 django.urls.path 原型
    • route 一個包含 url 正則的字串, Django 會從 urlpatterns 列表中依次匹配
      • 需要注意的是它並不關心 http 謂詞 GET/POST
    • view 若匹配正則,會呼叫一個檢視函式,該檢視函式預設的第一個引數是一個 HttpRequest 物件
    • path() argument: name 命名引數,方便在其他的地方引用,類似於其他同類框架中的命名路由

相關文章