Python Bookshelf App

The Bookshelf app is a sample web app written in Python that shows
how to use a variety of Google Cloud Platform (GCP) products, including:

App Engine flexible environment

Cloud SQL

Cloud Datastore

Cloud Storage

Cloud Pub/Sub

This tutorial explores the Bookshelf app and discusses how each feature of the
app is implemented using familiar technologies and services provided by
GCP.

The Bookshelf app is based on the
Flask
web application framework. The sample app uses Flask because of its simplicity
and ease of use, but the concepts and technologies explored are applicable
regardless of which framework you use. You could implement this app in another
web app framework of your choice, for example,
Django.

Throughout the tutorial, the code follows best practices and common patterns for
larger Flask apps.
Notably, the app makes use of
blueprints
and
app factories.
If you are unfamiliar with these patterns, we recommend reviewing the Flask
documentation.

The Bookshelf sample app stores a collection of book titles. Anyone who has
access to the app can add books to the list. The sample app offers these
features:

Users can view the list of books

Users can add and remove books from the list.

Users can edit book details.

Users can upload cover images for books.

Users can log in with their Google accounts and view the books that they
have added to the list.

Objectives

Clone or download the sample app.

Build the app and run it on your local machine.

Deploy the app to App Engine.

Walk through the sample code.

Learn how the app stores structured data.

Learn how the app stores binary data in Cloud Storage.

Learn how the app authenticates users.

Learn how the app creates event logs that are visible in the
Google Cloud Platform Console.

Learn how the app uses Cloud Pub/Sub to send tasks to a background
worker.

Costs

This tutorial uses billable components of
GCP
including Compute Engine.

This tutorial has several steps, and each step is documented on its own page.
The final page of the tutorial includes instructions for cleaning up
resources, so you won't continue to be billed for GCP services.
If you decide not to complete all the steps of the tutorial, see the
cleanup instructions
on the final page.

Before you begin

Use the GCP Console to set up your Google Cloud Platform project:

Create a new GCP project, create an
App Engine app, and then enable billing in that project.
Go
to App Engine

When prompted, select the region
where you want your App Engine app located and then enable
billing. After your GCP project is created, the
Dashboard opens.

If the project ID listed in the output isn't the project that you
intended to use for this tutorial, set the project.

gcloud config set project [YOUR_PROJECT_ID]

where [YOUR_PROJECT_ID] is the ID of the project
you created or chose to use for this tutorial.
You can create Cloud SDK configurations to
set configuration properties, such as a GCP project ID, and then
quickly switch between those configurations each time you use the
gcloud tool, see
Managing Cloud SDK configurations for more information.

This tutorial assumes that you are familiar with Python programming and that
you have a Python development environment set up. If you don't have Python
installed, see
Setting up a Python development environment.
Even if you already have Python installed it's useful to review the setup
instructions to ensure you have the latest Python tools.

Tutorial structure

The Bookshelf tutorial has several parts that demonstrate how the sample app
uses various GCP services.

The structured data part of the tutorial demonstrates how the sample app stores
book information in a SQL or NoSQL database.

The app's web page displays a form
where the user can enter the title, author, description, and publication date of
a book. For each book entered, the app stores this information in a database,
so it can be retrieved later for viewing or editing.
For this step of the tutorial, you have your choice of
three databases:
Cloud SQL, Cloud Datastore, or MongoDB. After you complete this step with one of the
databases, you can move on to the next step.

The Cloud Storage part of the tutorial demonstrates how the sample app
stores binary data in Cloud Storage. On the app's web page, the user
can specify a cover image for each book. The app stores the cover images in a
Cloud Storage bucket.

The authorization part of the tutorial demonstrates how the app provides a
sign-in flow for the user. When a user is signed in, any books entered are
associated with the individual user. Signed-in users see both books created by
anonymous users and their own books. Other users cannot see books created by a
signed-in user.

The logging part of the tutorial demonstrates how the app writes
logs that become visible in the Google Cloud Platform Console. Logs of this type can
provide diagnostic information during app development.

The Cloud Pub/Sub part of the tutorial demonstrates how the app uses
Cloud Pub/Sub to send tasks to a background worker. The worker gathers
information from the Google Books API and updates the book information in the
database.