Chapter 1: Hello, World!
Creating our development environment
Deploying our application to production
Chapter 2: Getting Started with Our Headlines Project
Setting up our project and a Git repository
Creating a new Flask application
Introduction to RSS and RSS feeds
Chapter 3: Using Templates in Our Headlines Project
Basic use of Jinja templates
Advanced use of Jinja templates
Chapter 4: User Input for Our Headlines Project
Getting user input using HTTP GET
Getting user input using HTTP POST
Adding weather and currency data
Chapter 5: Improving the User Experience of Our Headlines Project
Adding cookies to our Headlines application
Adding CSS to our Headlines application
Chapter 6: Building an Interactive Crime Map
Setting up a new Git repository
Understanding relational databases
Installing and configuring MySQL on our VPS
Creating our Crime Map database in MySQL
Creating a basic database web application
Chapter 7: Adding Google Maps to Our Crime Map Project
Running a database application locally
Adding an embedded Google Maps widget to our application
Adding an input form for new crimes
Displaying existing crimes on our map
Chapter 8: Validating User Input in Our Crime Map Project
Choosing where to validate
Trying out an XSS example
Validating and sanitizing
Chapter 9: Building a Waiter Caller App
Setting up a new Git repository
Using Bootstrap to kick-start our application
Adding user account control to our application
Chapter 10: Template Inheritance and WTForms in Waiter Caller Project
Adding the Account and Dashboard pages
Shortening URLs using the bitly API
Adding functionality to handle attention requests
Adding user feedback with WTForms
Chapter 11: Using MongoDB with Our Waiter Caller Project
Testing our application in production
Adding some finishing touches
Chapter 12: Flask Configurations
Environment setup with virtualenv
Handling basic configurations
Organization of static files
Being deployment specific with instance folders
Composition of views and models
Creating a modular web app with blueprints
Making a Flask app installable using setuptools
Chapter 13: Templating with Jinja2
Block composition and layout inheritance
Creating a custom context processor
Creating a custom Jinja2 filter
Creating a custom macro for forms
Advanced date and time formatting
Chapter 14: Data Modeling in Flask
Creating a SQLAlchemy DB instance
Creating a basic product model
Creating a relational category model
Database migration using Alembic and Flask-Migrate
Model data indexing with Redis
Opting the NoSQL way with MongoDB
Chapter 15: Working with Views
Writing function-based views and URL routes
URL routing and product-based pagination
Dealing with XHR requests
Decorator to handle requests beautifully
Creating custom 404 and 500 handlers
Flashing messages for better user feedback
Chapter 16: Webforms with WTForms
SQLAlchemy model data as form representation
Validating fields on the server side
Creating a common forms set
Creating custom fields and validation
Uploading files via forms
Cross-site Request Forgery protection
Chapter 17: Authenticating in Flask
Simple session-based authentication
Authenticating using the Flask-Login extension
Using OpenID for authentication
Using Facebook for authentication
Using Google for authentication
Using Twitter for authentication
Chapter 18: RESTful API Building
Creating a class-based REST interface
Creating an extension-based REST interface
Creating a SQLAlchemy-independent REST API
A complete REST API example
Chapter 19: Admin Interface for Flask Apps
Creating a simple CRUD interface
Using the Flask-Admin extension
Registering models with Flask-Admin
Creating custom forms and actions
WYSIWYG for textarea integration
Chapter 20: Internationalization and Localization
Lazy evaluation and the gettext/ngettext functions
Global language-switching action
Chapter 21: Debugging, Error Handling, and Testing
Setting up basic file logging
Sending e-mails on the occurrence of errors
Using Sentry to monitor exceptions
Creating our first simple test
Writing more tests for views and logic
Using mocking to avoid real API access
Determining test coverage
Using profiling to find bottlenecks
Chapter 22: Deployment and Post Deployment
Deploying with uWSGI and Nginx
Deploying with Gunicorn and Supervisor
Using Fabric for deployment
S3 storage for file uploads
Deploying with AWS Elastic Beanstalk
Application monitoring with Pingdom
Application performance management and monitoring with New Relic
Chapter 23: Other Tips and Tricks
Full-text search with Whoosh
Full-text search with Elasticsearch
Using caching with your application
E-mail support for Flask applications
Understanding asynchronous operations
Chapter 24: Getting Started
Python package management with pip
Dependency sandboxing with virtualenv
The beginning of our project
Chapter 25: Creating Models with SQLAlchemy
Relationships between models
The convenience of SQLAlchemy sessions
Database migrations with Alembic
Chapter 26: Creating Views with Templates
Chapter 27: Creating Controllers with Blueprints
Request setup, teardown, and application globals
Chapter 28: Advanced Application Structure
Chapter 29: Securing Your App
Chapter 30: Using NoSQL with Flask
Leveraging the power of NoSQL
Chapter 31: Building RESTful APIs
Setting up a RESTful Flask API
Chapter 32: Creating Asynchronous Tasks with Celery
Setting up Celery and RabbitMQ
Chapter 33: Useful Flask Extensions
Chapter 34: Building Your Own Extension
Creating a YouTube Flask extension
Modifying the response with Flask extensions
Chapter 35: Testing Flask Apps
Unit testing the application
Chapter 36: Deploying Flask Apps
Deploying on your own server
Deploying on Amazon web services