在 App Engine 標準環境執行 Django

在 App Engine 標準環境中執行的 Django 應用程式會根據流量動態調度資源。

本教學課程假設您熟悉 Django 網頁開發作業。如果您是 Django 開發新手,建議先完成「編寫第一個 Django 應用程式」教學課程,再繼續操作。

本教學課程以 Django 為例,但您也可以將這個部署程序用於其他以 Django 為基礎的架構,例如 Wagtail 和 Django CMS。

本教學課程使用 Django 4,至少需要 Python 3.8。App Engine 標準環境支援 Python 3.7 以上版本,包括 Python 3.8。

目標

在這個教學課程中,您將執行下列操作:

  • 建立並連線至 Cloud SQL 資料庫。
  • 建立及使用 Secret Manager 密鑰值。
  • 將 Django 應用程式部署至 App Engine 標準環境。

費用

在本文件中,您將使用下列 Google Cloud計費元件:

如要根據預測用量估算費用,請使用 Pricing Calculator。

初次使用 Google Cloud 的使用者可能符合免費試用期資格。

事前準備

  1. 登入 Google Cloud 帳戶。如果您是 Google Cloud新手,歡迎 建立帳戶,親自體驗產品的實際應用成效。新客戶還能獲得價值 $300 美元的免費抵免額,能用於執行、測試及部署工作負載。
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Cloud SQL Admin API, Secret Manager, and Cloud Build APIs, if any are not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

  5. 安裝 gcloud CLI。

  6. 如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。

  7. 執行下列指令,初始化 gcloud CLI:

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the Cloud SQL Admin API, Secret Manager, and Cloud Build APIs, if any are not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

  11. 安裝 gcloud CLI。

  12. 如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。

  13. 執行下列指令,初始化 gcloud CLI:

    gcloud init
  14. 如果尚未初始化 App Engine,請先執行這項操作,然後選取偏好的區域:

    gcloud app create
    

準備環境

複製範例應用程式

Django 範例應用程式的程式碼位於 GitHub 的 GoogleCloudPlatform/python-docs-samples 存放區。

  1. 您可以下載範例的 ZIP 檔案並解壓縮,也可以將存放區複製到本機電腦:

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
    
  2. 前往含有程式碼範例的目錄:

    Linux/macOS

    cd python-docs-samples/appengine/standard_python3/django
    

    Windows

    cd python-docs-samples\appengine\standard_python3\django
    

確認 Python 設定

本教學課程會使用 Python 在電腦上執行範例應用程式。此外,程式碼範例也必須安裝依附元件

詳情請參閱 Python 開發環境指南。

  1. 確認 Python 版本至少為 3.8。

     python -V
    

    畫面上應會顯示 Python 3.8.0 以上版本。

  2. 建立 Python 虛擬環境並安裝依附元件:

    Linux/macOS

    python -m venv venv
    source venv/bin/activate
    pip install --upgrade pip
    pip install -r requirements.txt
    

    Windows

    python -m venv venv
    venv\scripts\activate
    pip install --upgrade pip
    pip install -r requirements.txt
    

下載 Cloud SQL Auth Proxy,從本機連線至 Cloud SQL

部署後,應用程式會使用 App Engine 標準環境內建的 Cloud SQL Auth Proxy,與 Cloud SQL 執行個體通訊。不過,如要在本機測試應用程式,您必須在開發環境中安裝及使用 Proxy 的本機副本。詳情請參閱 Cloud SQL Auth Proxy 指南。

Cloud SQL Auth Proxy 會使用 Cloud SQL API 與 SQL 執行個體互動。為此,您必須透過 gcloud CLI 驗證應用程式。

  1. 驗證身分並取得 API 憑證:

    gcloud auth application-default login
    
  2. 在本機下載並安裝 Cloud SQL Auth Proxy。

    開始前,請先判斷機器的架構。

    如果是在 Linux 或 Mac 上執行,可以執行下列指令來找出這個檔案:

      uname -a
      

    Linux 64 位元

    1. 下載 Cloud SQL Auth Proxy:
      curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.26.0/cloud-sql-proxy.linux.amd64
    2. 將 Cloud SQL 驗證 Proxy 設為允許執行:
      chmod +x cloud-sql-proxy

    Linux 32 位元

    1. 下載 Cloud SQL Auth Proxy:
      curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.26.0/cloud-sql-proxy.linux.386
    2. 如果找不到 curl 指令,請執行 sudo apt install curl 並重複下載指令。
    3. 將 Cloud SQL 驗證 Proxy 設為允許執行:
      chmod +x cloud-sql-proxy

    macOS 64 位元

    1. 下載 Cloud SQL Auth Proxy:
      curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.26.0/cloud-sql-proxy.darwin.amd64
    2. 將 Cloud SQL 驗證 Proxy 設為允許執行:
      chmod +x cloud-sql-proxy

    Mac M1

    1. 下載 Cloud SQL Auth Proxy:
        curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.26.0/cloud-sql-proxy.darwin.arm64
        
    2. 將 Cloud SQL 驗證 Proxy 設為允許執行:
        chmod +x cloud-sql-proxy
        

    Windows 64 位元

    在 https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.26.0/cloud-sql-proxy.x64.exe 上按一下滑鼠右鍵,然後選取「另存連結為」,即可下載 Cloud SQL Auth Proxy。將檔案重新命名為 cloud-sql-proxy.exe。

    Windows 32 位元

    在 https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.26.0/cloud-sql-proxy.x86.exe 上按一下滑鼠右鍵,然後選取「另存連結為」,即可下載 Cloud SQL Auth Proxy。將檔案重新命名為 cloud-sql-proxy.exe。

    Cloud SQL Auth Proxy Docker 映像檔

    Cloud SQL 驗證 Proxy 有不同的容器映像檔,例如 distroless、alpine 和 buster。預設的 Cloud SQL Auth Proxy 容器映像檔使用 distroless,其中不含任何殼層。如需殼層或相關工具,請根據 alpine 或 buster 下載映像檔。詳情請參閱「Cloud SQL Auth Proxy 容器映像檔」。

    您可以使用下列指令,透過 Docker 將最新映像檔提取至本機電腦:

    docker pull gcr.io/cloud-sql-connectors/cloud-sql-proxy:2.26.0
    

    其他 OS

    如要使用未列出的作業系統,可以從來源編譯 Cloud SQL Auth Proxy。

    你可以選擇將下載內容移至常見位置,例如 PATH 上的位置或主目錄。如果您選擇這麼做,請記得在稍後啟動 Cloud SQL Auth Proxy 時,使用 cloud-sql-proxy 指令參照您選擇的位置。

建立後端服務

本教學課程使用多項 Google Cloud 服務,提供支援已部署 Django 專案的資料庫、媒體儲存空間和密鑰儲存空間。這些服務會部署在特定區域。為提高服務間的效率,所有服務都應部署在同一個區域。如要進一步瞭解離您最近的區域,請參閱「各區域適用的產品」。

本教學課程使用 App Engine Standard 中整合的靜態資產代管機制。

設定 PostgreSQL 適用的 Cloud SQL 執行個體

Django 官方支援多個關聯式資料庫,但對 PostgreSQL 的支援最完善。Cloud SQL 支援 PostgreSQL,因此本教學課程選擇使用這類資料庫。

以下章節說明如何為應用程式建立 PostgreSQL 執行個體、資料庫和資料庫使用者。

  1. 建立 PostgreSQL 執行個體:

    控制台

    1. 前往 Google Cloud 控制台的「Cloud SQL 執行個體」頁面。

      前往 Cloud SQL 執行個體頁面

    2. 點選「建立執行個體」。

    3. 按一下「Choose PostgreSQL」(選擇 PostgreSQL)。

    4. 在「SQL 版本」部分,選擇「Enterprise」。

    5. 在「版本預設設定」中,選擇「沙箱」。

    6. 在「Instance ID」(執行個體 ID) 欄位中輸入 INSTANCE_NAME。

    7. 輸入 postgres 使用者的密碼。

    8. 其他欄位皆使用預設值。

    9. 點選「建立執行個體」。

    執行個體會在幾分鐘內準備就緒。

    gcloud

    • 建立 PostgreSQL 執行個體:

      gcloud sql instances create INSTANCE_NAME \
          --project PROJECT_ID \
          --database-version POSTGRES_16 \
          --tier db-n1-standard-2 \
          --region REGION
      

    更改下列內容:

    • INSTANCE_NAME:Cloud SQL 執行個體名稱
    • PROJECT_ID: Google Cloud 專案 ID
    • REGION:Google Cloud 區域

    建立執行個體並準備好供您使用,需要幾分鐘的時間。

  2. 在建立的執行個體中建立資料庫:

    控制台

    1. 在執行個體頁面中,前往「資料庫」分頁。
    2. 按一下 [Create database] (建立資料庫)。
    3. 在「Database Name」(資料庫名稱) 對話方塊中輸入 DATABASE_NAME。
    4. 點選「建立」。

    gcloud

    • 在最近建立的執行個體中建立資料庫:

      gcloud sql databases create DATABASE_NAME \
          --instance INSTANCE_NAME
      

      將 DATABASE_NAME 替換為執行個體內的資料庫名稱。

  3. 建立資料庫使用者:

    控制台

    1. 在執行個體頁面中,前往「Users」(使用者) 分頁標籤。
    2. 點選「新增使用者帳戶」。
    3. 在「內建驗證」下方的「選擇驗證方式」對話方塊中:
    4. 輸入使用者名稱 DATABASE_USERNAME。
    5. 輸入密碼 DATABASE_PASSWORD
    6. 按一下「新增」。

    gcloud

    • 在最近建立的執行個體中建立使用者:

      gcloud sql users create DATABASE_USERNAME \
          --instance INSTANCE_NAME \
          --password DATABASE_PASSWORD
      

      將 PASSWORD 替換成安全密碼。

將密鑰值儲存在 Secret Manager

後端服務設定完成後,Django 需要這些服務的相關資訊。本教學課程不會直接將這些值放入 Django 原始碼,而是使用 Secret Manager 安全地儲存這項資訊。

將 Django 環境檔案建立為 Secret Manager 密鑰

您會在安全的 env 檔案中儲存啟動 Django 所需的設定。 範例應用程式會使用 Secret Manager API 擷取密鑰值,並使用 django-environ 套件將值載入 Django 環境。密鑰已設定為可供 App Engine 標準環境存取。

  1. 建立名為 .env 的檔案,定義資料庫連線字串、媒體儲存空間名稱和新的 SECRET_KEY 值:

    echo DATABASE_URL=postgres://DATABASE_USERNAME:DATABASE_PASSWORD@//cloudsql/PROJECT_ID:REGION:INSTANCE_NAME/DATABASE_NAME > .env
    echo GS_BUCKET_NAME=PROJECT_ID_MEDIA_BUCKET >> .env
    echo SECRET_KEY=$(cat /dev/urandom | LC_ALL=C tr -dc '[:alpha:]'| fold -w 50 | head -n1) >> .env
    
  2. 將密鑰儲存在 Secret Manager:

    控制台

    1. 前往 Google Cloud 控制台的「Secret Manager」頁面。

      前往「Secret Manager」頁面

    2. 按一下「建立密鑰」。

    3. 在「Name」(名稱) 欄位中,輸入 django_settings。

    4. 在「Secret value」(密鑰值) 對話方塊中,貼上 .env 檔案的內容。

    5. 點選「建立密鑰」。

    6. 刪除本機檔案,避免本機設定覆寫。

    gcloud

    1. 建立新的密鑰 django_settings,並將 .env 檔案的值設為該密鑰的值:

      gcloud secrets create django_settings --data-file .env
      
    2. 刪除本機檔案,避免本機設定覆寫:

      rm .env
      
  3. 設定 Secret 的存取權:

    控制台

    1. 按一下「Permissions」(權限) 分頁標籤。
    2. 按一下「授予存取權」。
    3. 在「新增成員」欄位中輸入 PROJECT_ID@appspot.gserviceaccount.com,然後按 Enter。
    4. 在「角色」下拉式選單中,選取「Secret Manager Secret Accessor」(Secret Manager 密鑰存取者)。
    5. 按一下 [儲存]。

    gcloud

    授予 App Engine 標準服務帳戶密鑰存取權:

      gcloud secrets add-iam-policy-binding django_settings \
          --member serviceAccount:PROJECT_ID@appspot.gserviceaccount.com \
          --role roles/secretmanager.secretAccessor
    

    在輸出內容中,確認 bindings 列出新的服務帳戶。

在本機電腦上執行應用程式

設定好後端服務後,您現在可以在電腦上執行應用程式。這個設定可進行本機開發、建立超級使用者,以及套用資料庫遷移作業。

  1. 在另一個終端機中啟動 Cloud SQL Auth Proxy:

    Linux/macOS

    ./cloud-sql-proxy PROJECT_ID:REGION:INSTANCE_NAME
    

    Windows

    cloud-sql-proxy.exe PROJECT_ID:REGION:INSTANCE_NAME
    

    這個步驟會建立本機電腦與 Cloud SQL 執行個體的連線,以進行本機測試。在本機測試應用程式時,請持續執行 Cloud SQL Auth Proxy。在另一個終端機中執行這項程序,即可在程序執行期間繼續工作。

  2. 在原始終端機中,於本機設定專案 ID (Secret Manager API 使用):

    Linux/macOS

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID
    

    Windows

    set GOOGLE_CLOUD_PROJECT=PROJECT_ID
    
  3. 設定環境變數,指出您使用的是 Cloud SQL Auth Proxy (程式碼會辨識這個值):

    Linux/macOS

    export USE_CLOUD_SQL_AUTH_PROXY=true
    

    Windows

    set USE_CLOUD_SQL_AUTH_PROXY=true
    
  4. 執行 Django 遷移作業,設定模型和資產:

    python manage.py makemigrations
    python manage.py makemigrations polls
    python manage.py migrate
    python manage.py collectstatic
    
  5. 啟動 Django 網路伺服器:

    python manage.py runserver 8080
    
  6. 在瀏覽器中前往 http://localhost:8080。

    如果您使用 Cloud Shell,請按一下「網頁預覽」按鈕,然後選取「透過以下通訊埠預覽:8080」。

    頁面會顯示以下文字:「Hello, world. 你目前位於民調索引頁面。」電腦上執行的 Django 網路伺服器會提供範例應用程式網頁。

  7. 按下 Ctrl/Cmd+C 鍵,停止本機網路伺服器。

使用 Django 管理控制台

如要登入 Django 的管理控制台,您必須建立超級使用者。由於您在本機可存取資料庫連線,因此可以執行管理指令:

  1. 建立超級使用者。系統會提示您輸入使用者名稱、電子郵件地址和密碼。

    python manage.py createsuperuser
    
  2. 啟動本機網路伺服器:

    python manage.py runserver
    
  3. 透過瀏覽器前往 http://localhost:8000/admin。

  4. 使用您執行 createsuperuser 時所用的使用者名稱和密碼,登入管理員網站。

將應用程式部署至 App Engine 標準環境

設定所有後端服務並在本機測試應用程式後,您現在可以將應用程式部署至 App Engine 標準環境:

  1. 執行下列指令上傳應用程式,這會按照 app.yaml 所述部署應用程式,並將新部署的版本設為預設版本,導致該版本處理所有新流量:
    gcloud app deploy
  2. 系統提示時,輸入「yes」確認設定。
  3. 等候更新完成通知訊息。
  4. 開啟 app.yaml,並將 APPENGINE_URL 的值更新為已部署的網址:
    ...
    env_variables:
        APPENGINE_URL: https://PROJECT_ID.uc.r.appspot.com
    
  5. 上傳設定變更:
    gcloud app deploy

執行已部署的應用程式

應用程式已部署完成,現在可以存取:

  • 開啟已部署的網站:

    gcloud app browse
    
  • 或者,顯示網址並手動開啟:

    gcloud app describe --format "value(defaultHostname)"
    

您的要求會由在 App Engine 標準環境中執行的網路伺服器處理。

更新應用程式

如要更新應用程式,請變更程式碼,然後再次執行 gcloud app deploy 指令。

部署作業會建立應用程式的新版本,並將其升級為預設版本。舊版應用程式仍會保留。這些應用程式版本都是可計費的資源。如要降低費用,請刪除應用程式的非預設版本。

設定正式版

您現在已部署可運作的 Django,但仍可採取進一步措施,確保應用程式已準備好投入實際工作環境。

停用偵錯功能

確認 mysite/settings.py 中的 DEBUG 變數已設為 False。這樣一來,使用者就不會看到詳細的錯誤頁面,避免設定資訊外洩。

限制資料庫使用者權限

使用 Cloud SQL 建立的任何使用者,都具有與 cloudsqlsuperuser 角色相關聯的權限:CREATEROLE、CREATEDB 和 LOGIN。

如要避免 Django 資料庫使用者擁有這些權限,請在 PostgreSQL 中手動建立使用者。您必須安裝 psql 互動式終端機,或使用已預先安裝這項工具的 Cloud Shell。

控制台

  1. 在 Google Cloud 控制台中啟用 Cloud Shell。

    啟用 Cloud Shell

  2. 在 Cloud Shell 中,使用內建終端機連線至 INSTANCE_NAME 執行個體:

    gcloud sql connect INSTANCE_NAME --user postgres
    
  3. 輸入 postgres 使用者密碼。

    你目前使用的是 psql。畫面上應會顯示 postgres=> 提示。

  4. 建立使用者:

    CREATE USER DATABASE_USERNAME WITH PASSWORD 'DATABASE_PASSWORD';
    

    將 PASSWORD 替換為隨機產生的專屬密碼。

  5. 將新資料庫的完整權限授予新使用者:

    GRANT ALL PRIVILEGES ON DATABASE DATABASE_NAME TO DATABASE_USERNAME;
    
  6. 出口 psql:

    \q
    

gcloud

  1. 啟動與 SQL 執行個體的連線:

    gcloud sql connect INSTANCE_NAME --user postgres
    

    將 INSTANCE_NAME 換成建立的 Cloud SQL 執行個體。

  2. 輸入 postgres 使用者密碼。

    你目前使用的是 psql。畫面上應會顯示 postgres=> 提示。

  3. 建立使用者:

    CREATE USER DATABASE_USERNAME WITH PASSWORD 'DATABASE_PASSWORD';
    
  4. 將新資料庫的完整權限授予新使用者:

    GRANT ALL PRIVILEGES ON DATABASE DATABASE_NAME TO DATABASE_USERNAME;
    
  5. 出口 psql:

    \q
    

瞭解程式碼

應用程式範例

Django 範例應用程式是以標準 Django 工具建立。下列指令會建立專案和 polls 應用程式:

django-admin startproject mysite
python manage.py startapp polls

基本檢視畫面、模型和路徑設定是從「編寫第一個 Django 應用程式」(第 1 部分和第 2 部分) 複製而來。

Secret Manager 中的密鑰

settings.py 檔案包含的程式碼會使用 Secret Manager Python API 擷取具名密碼的最新版本,並將其拉入環境 (使用 django-environ):

env = environ.Env(DEBUG=(bool, False))
env_file = os.path.join(BASE_DIR, ".env")

if os.path.isfile(env_file):
    # Use a local secret file, if provided

    env.read_env(env_file)
# ...
elif os.environ.get("GOOGLE_CLOUD_PROJECT", None):
    # Pull secrets from Secret Manager
    project_id = os.environ.get("GOOGLE_CLOUD_PROJECT")

    client = secretmanager.SecretManagerServiceClient()
    settings_name = os.environ.get("SETTINGS_NAME", "django_settings")
    name = f"projects/{project_id}/secrets/{settings_name}/versions/latest"
    payload = client.access_secret_version(name=name).payload.data.decode("UTF-8")

    env.read_env(io.StringIO(payload))
else:
    raise Exception("No local .env or GOOGLE_CLOUD_PROJECT detected. No secrets found.")

密鑰可用於儲存多個密鑰值,減少需要設定的不同密鑰數量。

CSRF 設定

Django 內建防範跨網站偽造要求 (CSRF) 的機制。 自 Django 4.0 起,這項功能的運作方式有所變更,因此請務必告知 Django 託管網址,以便為提交資料的使用者提供最佳保護。

您會在 settings.py 檔案中以環境變數的形式提供應用程式的網址。Django 會將這個值用於相關設定。

# SECURITY WARNING: It's recommended that you use this when
# running in production. The URL will be known once you first deploy
# to App Engine. This code takes the URL and converts it to both these settings formats.
APPENGINE_URL = env("APPENGINE_URL", default=None)
if APPENGINE_URL:
    # Ensure a scheme is present in the URL before it's processed.
    if not urlparse(APPENGINE_URL).scheme:
        APPENGINE_URL = f"https://{APPENGINE_URL}"

    ALLOWED_HOSTS = [urlparse(APPENGINE_URL).netloc]
    CSRF_TRUSTED_ORIGINS = [APPENGINE_URL]
    SECURE_SSL_REDIRECT = True
else:
    ALLOWED_HOSTS = ["*"]

本機密鑰覆寫

如果在本機檔案系統中找到 .env 檔案,系統就會使用該檔案,而非 Secret Manager 中的值。在本機建立 .env 檔案有助於進行本機測試 (例如針對 SQLite 資料庫或其他本機設定進行本機開發)。

資料庫連線

settings.py 檔案包含 SQL 資料庫的設定。它會使用 django-environ 的 env.db() 輔助程式,將 DATABASE_URL 中設定的連線字串載入 DATABASES 設定。

在本機執行應用程式並使用 Cloud SQL Auth Proxy 存取代管資料庫時,USE_CLOUD_SQL_AUTH_PROXY 旗標會調整資料庫設定,以使用 Proxy。

# Use django-environ to parse the connection string
DATABASES = {"default": env.db()}

# If the flag as been set, configure to use proxy
if os.getenv("USE_CLOUD_SQL_AUTH_PROXY", None):
    DATABASES["default"]["HOST"] = "127.0.0.1"
    DATABASES["default"]["PORT"] = 5432

託管靜態內容

app.yaml 檔案包含部署至 App Engine 的設定資訊。這個 app.yaml 檔案會指定 App Engine 從 static/ 目錄提供靜態檔案:

runtime: python313

env_variables:
  # This setting is used in settings.py to configure your ALLOWED_HOSTS
  # APPENGINE_URL: PROJECT_ID.uc.r.appspot.com

handlers:
# This configures Google App Engine to serve the files in the app's static
# directory.
- url: /static
  static_dir: static/

# This handler routes all requests not caught above to your main app. It is
# required when static routes are defined, but can be omitted (along with
# the entire handlers section) when there are no static files defined.
- url: /.*
  script: auto

在本機執行應用程式時,如果啟用 DEBUG,Django 會在本機提供下列檔案:

from django.conf import settings
from django.conf.urls.static import static
from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path("", include("polls.urls")),
    path("admin/", admin.site.urls),
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

清除所用資源

為避免因為本教學課程所用資源,導致系統向 Google Cloud 收取費用,請刪除含有相關資源的專案,或者保留專案但刪除個別資源。

刪除專案

  1. 前往 Google Cloud 控制台的「Manage resources」(管理資源) 頁面。

    前往「Manage resources」(管理資源)

  2. 在專案清單中選取要刪除的專案,然後點選「Delete」(刪除)。
  3. 在對話方塊中輸入專案 ID,然後按一下 [Shut down] (關閉) 以刪除專案。

後續步驟