儲存及擷取資料

區域 ID

REGION_ID 是 Google 根據您在建立應用程式時選取的地區所指派的簡寫代碼。雖然某些區域 ID 可能看起來與常用的國家/地區代碼相似,但此代碼並非對應國家/地區或省份。如果是 2020 年 2 月後建立的應用程式,App Engine 網址會包含 REGION_ID.r。如果是在此日期之前建立的現有應用程式,網址中則可選擇加入地區 ID。

進一步瞭解區域 ID

更新要連線的網路服務,並透過 Datastore 模式的 Firestore (Datastore) 處理資料。使用 Datastore 用戶端程式庫將您的網路服務連線至 Datastore,這是專為自動調整資源配置、高效能,以及協助應用程式開發所打造的非關聯 (NoSQL) 資料庫。

在這個步驟中,您會更新網路服務,使其將頁面要求資料儲存在 Datastore 中,然後顯示最後十個頁面要求的清單。這個步驟的目標是先讓網路服務可以執行資料儲存作業,然後再新增 Firebase 驗證並對已驗證使用者的資料儲存空間執行個人化作業。

事前準備

如果您已完成本指南先前提過的所有步驟,請跳過本節。 否則,請完成下列其中一個步驟:

  • 從「建構 Python 3 應用程式」開始,完成這個步驟之前的所有步驟。

  • 如果您已經有 Google Cloud 專案,可以下載網路服務的副本以繼續操作:

    1. 使用 Git 下載範例應用程式存放區:

      git clone https://github.com/GoogleCloudPlatform/python-docs-samples
      

      您也可以下載 zip 格式的範例,然後解壓縮該檔案。

    2. 前往包含上一步驟檔案複本的目錄:

      cd python-docs-samples/appengine/standard_python3/building-an-app/building-an-app-1
      
    3. 啟用 Datastore API:

      gcloud services enable datastore.googleapis.com
      

儲存及擷取 Datastore 實體

完成下列步驟,將網站要求時間當成 Datastore 實體進行儲存及擷取:

  1. main.py 檔案中新增下列程式碼:

    from google.cloud import datastore
    
    datastore_client = datastore.Client()
    
    def store_time(dt):
        entity = datastore.Entity(key=datastore_client.key("visit"))
        entity.update({"timestamp": dt})
    
        datastore_client.put(entity)
    
    
    def fetch_times(limit):
        query = datastore_client.query(kind="visit")
        query.order = ["-timestamp"]
    
        times = query.fetch(limit=limit)
    
        return times
    
    

    上述 store_time 方法會使用 Datastore 用戶端程式庫在 Datastore 中建立新實體。Datastore 實體是包含「金鑰」和「屬性」的資料物件。在這個範例中,實體的金鑰是其自訂「種類」visit。實體還有一個 timestamp 屬性,包含頁面要求的時間。

    fetch_times 方法會使用 visit 金鑰查詢資料庫中的最近十個 visit 實體,然後將這些實體按照遞減順序儲存在清單中。

  2. 更新 root 方法以呼叫新方法:

    @app.route("/")
    def root():
        # Store the current access time in Datastore.
        store_time(datetime.datetime.now(tz=datetime.timezone.utc))
    
        # Fetch the most recent 10 access times from Datastore.
        times = fetch_times(10)
    
        return render_template("index.html", times=times)
    
    
  3. 更新 templates/index.html 檔案以輸出每個實體的 timestamp

    <h2>Last 10 visits</h2>
    {% for time in times %}
      <p>{{ time['timestamp'] }}</p>
    {% endfor %}
  4. 確認您的 requirements.txt 檔案包含所有必要的依附元件:

    Flask==3.0.0
    google-cloud-datastore==2.15.1
    

如要進一步瞭解 Datastore 實體、屬性和金鑰,請參閱「實體、屬性和金鑰」一文。如要進一步瞭解如何使用 Datastore 用戶端程式庫,請參閱「Datastore 用戶端程式庫」一文。

測試網路服務

請在虛擬環境中本機執行網路服務,以便進行測試:

  1. 在專案的主要目錄中執行下列指令,以安裝新的依附元件並執行網路服務。如果您尚未設定本機測試用的 virtualenv,請參閱測試您的網路服務

    pip install -r requirements.txt
    python main.py
    
  2. 請在網路瀏覽器中輸入下列網址,以便查看網路服務:

    http://localhost:8080
    

您可以在Google Cloud 控制台中查看網路服務建立的實體:

前往 Datastore 實體頁面

部署您的網路服務

現在您已在本機執行 Datastore,接下來可以將網路服務重新部署至 App Engine。

您可以在 app.yaml 檔案所在的專案根目錄中執行下列指令:

gcloud app deploy

系統會自動將所有流量轉送至您部署的新版本。

如要進一步瞭解如何管理版本,請參閱管理服務和版本

查看服務

如要快速啟動瀏覽器並前往 https://PROJECT_ID.REGION_ID.r.appspot.com 使用網路服務,請執行下列指令:

gcloud app browse

後續步驟

您現在已搭配使用 Datastore 與網路服務,因此可以開始瞭解如何將 Firebase 新增至網路服務。