Рубрики
Без рубрики

Как использовать эмулятор Firestore с приложением Python 3 Flask

Если вы изо всех сил пытались сделать эмулятор Firestore работать со своим веб-приложением Python 3, не беспокоится – вот учебник для вас!. Помечено с Google Cloud, App Engine, Firestore, Python.

Прошло 9 месяцев после времени выполнения Python 3.7 на новом приложении Google App Engine (Gae 2-го поколения) было принято вообще доступно (GA).

Если вы думаете о Миграция вашего приложения GAE из Python 2 в Python 3 Или начала нового приложения Python 3 GAE с нуля, необходимый первый шаг – настроить местную среду.

Требования:

  • Python 3.
  • Java JDK (я рекомендую OpenJDK 11 от Утверждать ) – это необходимо для запуска эмулятора хранения данных или FireStore (через облако SDK)
  • Облако СДК

Я предполагаю, что вы знаете, как установить все эти Поэтому я не буду идти по шагам через него.

Я рекомендую использовать Pycharm в качестве IDE и используя виртуальные среды (которые очень … Leason Confort Via Pycharm ).

Компоненты облачных SDK

После установки Cloud SDK убедитесь, что включены следующие компоненты ( Инструкции ):

  • Облачные сердечные библиотеки SDK (ядро)
  • GCloud App Python Extensions (App-Engine-Python)
  • GCloud App Python Extensions – Дополнительные библиотеки (App-Engine-Python-Extras)
  • GCloud Beta Commands (Beta)
  • Облако огнестойкий эмулятор (облачный огнестойкий эмулятор)

Базовое приложение для колбы

Давайте начнем с Basic Flask Web App.

Во-первых, создайте требования .txt Файл и добавить Колбу в этом. Затем запустите эту команду, чтобы установить колбу через PYPI:

pip install -r requirements.txt

Далее создайте файл под названием main.py и введите следующий код в нем:

import os
from flask import Flask

app = Flask(__name__)


@app.route("/")
def index():
    return "Hello World!"


if __name__ == '__main__':
    if os.getenv('GAE_ENV', '').startswith('standard'):
        app.run()  # production
    else:
        app.run(port=8080, host="localhost")  # localhost

Теперь щелкните правой кнопкой мыши на файле Main.py в Pycharm и выберите «RUN». В качестве альтернативы вы можете запустить его через командную строку: Python Main.py Отказ

Откройте свой браузер и перейдите в http://localhost: 8080 Отказ Вы должны увидеть Привет мир! там.

HTML & CSS.

Если вы хотите, чтобы ваше веб-приложение для обслуживания HTML-файлов, создайте папку, называемую Шаблоны и файл под названием index.html В тудах (добавьте несколько HTML-код в нем).

Тогда вы можете редактировать свой Индекс () Обработчик для обслуживания файла HTML вместо Привет мир! нить:

from flask import Flask, render_template

app = Flask(__name__)


@app.route("/")
def index():
    return render_template("index.html")

Для файлов CSS вам необходимо создать новую папку в корне, называемой статический и разместить статические файлы (CSS, JavaScript, изображения и т. Д.) там.

app.yaml.

Двигатель Google App требует, чтобы вы имели файл конфигурации под названием App.yaml Для каждого из ваших веб-приложений. Создайте этот файл в корне и добавьте этот код в нем:

runtime: python37

handlers:
- url: /static
  static_dir: static
- url: /.*
  script: auto

Обратите внимание, что этот файл не нужен для выполнения вашего приложения Flask. Но это необходимо для запуска приложения в Google Cloud (Google App Engine).

На данный момент ваше веб-приложение должно выглядеть что-то подобное: Базовое приложение GAE (Github) Отказ

Гостевая книга

Допустим, мы хотим построить простую гостевую книгу, которая имеет следующие элементы:

  • Ящик ввода, где любой посетитель веб-сайта может ввести сообщение
  • Список сообщений, добавленных посетителями сайта

Веб-приложение должно выглядеть что-то подобное:

Вот код HTML для этого:




    
        
        Guestbook

        
    

    
        

Simple GAE app with Firestore

Enter your message:

{% if messages %} {% for item in messages %}

{{ item.message }} (message ID: {{item.id}})

{% endfor %} {% endif %}

требования

Это приложение использует FireStore в качестве базы данных, которая требует дополнительных пакетов Pypi, которые будут добавлены в ваш требования .txt Файл и установлен в вашей виртуальной среде:

Flask
google-cloud-firestore
mock
google-auth

насмехаться и Google-Auth Библиотеки помогают нам подключиться к эмулятору Firestore на Localhost.

main.py

Давайте начнем наш main.py Файл, создавая соединение с базой данных FireStore:

import os
import mock
from flask import Flask, render_template, request
from google.cloud import firestore
import google.auth.credentials


app = Flask(__name__)

if os.getenv('GAE_ENV', '').startswith('standard'):
    # production
    db = firestore.Client()
else:
    # localhost
    os.environ["FIRESTORE_DATASET"] = "test"
    os.environ["FIRESTORE_EMULATOR_HOST"] = "localhost:8001"
    os.environ["FIRESTORE_EMULATOR_HOST_PATH"] = "localhost:8001/firestore"
    os.environ["FIRESTORE_HOST"] = "http://localhost:8001"
    os.environ["FIRESTORE_PROJECT_ID"] = "test"

    credentials = mock.Mock(spec=google.auth.credentials.Credentials)
    db = firestore.Client(project="test", credentials=credentials)

Как видите, подключение к базе данных FireStore на производстве (в облаке Google) требуется только одна строка кода: дб Клиент () Отказ Это потому, что Google Cloud будет выяснить, какие ваши учетные данные для доступа к Firestore есть.

Однако, если вы хотите запустить ваше веб-приложение локально и подключиться к эмулятору FireStore, вам нужно немного больше кода, чтобы настроить все (переменные среды и учетные данные).

Конечно, вы можете поставить этот кусок кода в отдельный файл и сделать все немного красивее (например здесь ), но для этого простого примера мы будем держать все в одном файле Python.

Теперь, когда у вас есть код для подключения к эмулятору FireStore, готовый, вы можете настроить Индекс () обработчик:

@app.route("/", methods=["GET", "POST"])
def index():
    # get all messages from the Firestore
    messages_ref = db.collection(u'messages')  # a reference to the messages collection
    messages_gen = messages_ref.stream()  # messages generator: holds all message documents (these documents need to be converted to dicts)

    messages = []
    for message in messages_gen:
        message_dict = message.to_dict()  # converting DocumentSnapshot into a dictionary

        message_dict["id"] = message.id  # adding message ID to the dict, because it's not there by default
        messages.append(message_dict)  # appending the message dict to the messages list

    if request.method == "POST":
        # add message to Firestore
        message_ref = messages_ref.document()  # create a message document reference
        # now you can create or update the message document (set: if it exists, update it. If not, create a new one).
        message_ref.set({
            u'message': u'{}'.format(request.form.get("message")),
        })

    return render_template("index.html", messages=messages)

if __name__ == '__main__':
    if os.getenv('GAE_ENV', '').startswith('standard'):
        app.run()  # production
    else:
        app.run(port=8080, host="localhost", debug=True)  # localhost

Запуск эмулятора FireStore и приложение

Прежде чем вы сможете попробовать приложение Guestbook, вам нужно запустить эмулятор Firestore.

Откройте терминал и введите эту строку:

gcloud beta emulators firestore start --project test --host-port "localhost:8001"

Подождите, пока не начнет эмулятор. Вы можете подтвердить, что он успешно начал, собираясь на http://localhost: 8001/ – Если ты видишь На эмулятор включен.

Теперь вы можете запустить ваше веб-приложение (как раньше) и попробуйте приложение для гостевой книги.

Смотрите полный пример здесь Отказ

Вывод

Вот и это – вы настроили простое приложение для колбы, которое работает на Localhost и использует эмулятор Firestore. Если вы хотите развернуть ваше веб-приложение в Google App Engine, следуйте за Эти шаги Отказ

Дайте знать, если у вас появятся вопросы.:) Для более примеров проверить Этот репозиторий Github Отказ

Оригинал: “https://dev.to/ramuta/how-to-use-the-firestore-emulator-with-a-python-3-flask-app-31jm”