Index
A
- @app.route decorator
- about / Understanding the code
- Admin model forms
- customizing / Customizing Admin model forms
- admin website
- securing / Securing the admin website
- Authorization mixin, creating / Creating an authentication and authorization mixin
- Authentication mixin, creating / Creating an authentication and authorization mixin
- custom index page, setting up / Setting up a custom index page
- Flask-Admin templates / Flask-Admin templates
- AJAX
- used, for creating comments / Creating comments using AJAX
- form submissions / AJAX form submissions
- used, for loading comments / Loading comments using AJAX
- Ansible
- used, for automating deployment / Automating deployment using Ansible
- tips / Automating deployment using Ansible
- URL / Automating deployment using Ansible
- Apache's httpd
- about / Apache's httpd
- static files, serving / Serving static files
- Apache httpd
- with SSL support / Apache httpd
- asynchronous tasks
- running, with Celery / Asynchronous tasks with Celery
- Atom feeds
- creating / Creating Atom feeds
B
- backrefs
- using / Using backrefs
- base template
- creating, for blog / Creating a base template for the blog
- blog app
- enhancing / Enhancing the blog app
- blog entries
- retrieving / Retrieving blog entries
- filtering / Filtering the list of entries
- lookups, using / Special lookups
- expressions, combining / Combining expressions
- author, setting / Setting the author on blog entries
- blog project
- about / Introducing the blog project
- core skills / Introducing the blog project
- features / Introducing the blog project
- spec / The spec
- creating / Creating the blog project
- runnable Flask app, creating / A barebones Flask app
- zooming out / Zooming out
- import flow / The import flow
- Bootstrap themes
- URL / Enhancing the blog app
- built-in filters, Jinja2
- about / Jinja2 built-in filters
- URL / Jinja2 built-in filters
- abs() / Jinja2 built-in filters
- default() / Jinja2 built-in filters
- dictsort() / Jinja2 built-in filters
- int() / Jinja2 built-in filters
- length() / Jinja2 built-in filters
- reverse() / Jinja2 built-in filters
- safe() / Jinja2 built-in filters
- sort() / Jinja2 built-in filters
- striptags() / Jinja2 built-in filters
- truncate() / Jinja2 built-in filters
- urlize() / Jinja2 built-in filters
- built-in logger
- about / Logging
C
- caching
- with Redis / Caching with Flask-Cache and Redis
- with Flask-Cache / Caching with Flask-Cache and Redis
- Celery
- about / Asynchronous tasks with Celery
- used, for running asynchronous tasks / Asynchronous tasks with Celery
- columns
- about / Creating the Entry model
- command line instructions
- creating, with Flask-Script / Creating command line instructions with Flask-script
- Comment model
- creating / Creating a comment model
- schema migration, creating / Creating a schema migration
- comments
- creating, AJAX used / Creating comments using AJAX
- AJAX form submissions / AJAX form submissions
- data, validating in API / Validating data in the API
- preprocessors, using / Preprocessors and postprocessors
- postprocessors, using / Preprocessors and postprocessors
- loading, AJAX used / Loading comments using AJAX
- retrieving / Retrieving the list of comments
- contrib package
- control structures, Jinja2
- create.html template
- creating / The create.html template
- Cross-Site Request Forgery (CSRF) protection
- about / Introducing the blog project
- CSRF protection
- current user
- accessing / Accessing the current user
- custom index page
- setting up / Setting up a custom index page
- custom log message
- creating / Custom log messages
D
- data
- validating, in API / Validating data in the API
- database
- driver packages / Choosing a database engine
- SQLAlchemy, connecting to / Connecting to the database
- database engine
- selecting / Choosing a database engine
- delete view
- protecting / Protecting the edit and delete views
- detail view
- building / Building the detail view
- Django
- don't repeat yourself (DRY)
- about / Introducing SQLAlchemy
- Don't Repeat Yourself (DRY)
- about / Introducing Jinja2
E
- eager loading
- about / Introducing SQLAlchemy
- edit.html template
- creating / The edit.html template
- edit view
- protecting / Protecting the edit and delete views
- entry's author
- storing / Storing an entry's author
- Entry model
- creating / Creating the Entry model
- Entry table, creating / Creating the Entry table
- working with / Working with the Entry model
- existing entry, modifying / Making changes to an existing entry
- entry, deleting / Deleting an entry
- form, defining / Defining a form for the Entry model
- Entry model, attributes
- id / Creating the Entry model
- title / Creating the Entry model
- slug / Creating the Entry model
- body / Creating the Entry model
- created_timestamp / Creating the Entry model
- modified_timestamp / Creating the Entry model
- error messages
- validating / Validating input and displaying error messages
- displaying / Validating input and displaying error messages
- error reporting
- expressions
- combining / Combining expressions
- negation / Negation
- operator precedence / Operator precedence
F
- file uploads
- processing / Processing file uploads
- filter
- first() method
- versus one() method / Filtering the list of entries
- flash messages
- using / Using flash messages
- displaying, in template / Displaying flash messages in the template
- Flask
- unit testing / Flask and unit testing
- running, with WSGI server / Running Flask with a WSGI server
- Flask-Admin
- installing / Installing Flask-Admin
- adding, to app / Adding Flask-Admin to our app
- models, exposing / Exposing models through the Admin
- static assets, managing / Managing static assets via the Admin
- features / Reading more
- URL / Reading more
- Flask-Bcrypt extension
- using / Creating user objects
- Flask-Cache
- used, for caching / Caching with Flask-Cache and Redis
- Flask-Login
- about / Installing Flask-Login
- installing / Installing Flask-Login
- implementing / Implementing the Flask-Login interface
- Flask-Migrate
- adding, to project / Adding Flask-Migrate to our project
- Flask-Restless
- installing / Installing Flask-Restless
- setting up / Setting up Flask-Restless
- API requests, creating / Making API requests
- URL / Reading more
- Flask-Script
- used, for creating command line instructions / Creating command line instructions with Flask-script
- Flask-SQLAlchemy
- Flask app
- creating / Creating your first Flask app
- Flask, installing into virtualenv / Installing Flask in your virtualenv
- new file, creating / Hello, Flask!
- coding / Understanding the code
- routes, adding / Routes and requests
- requests, adding / Routes and requests
- values, reading from request / Reading values from the request
- debugging / Debugging Flask applications
- SQLAlchemy, using / Using SQLAlchemy in our Flask app
- Flask-Admin, adding / Adding Flask-Admin to our app
- reference link, for securing / Read more
- Flask extensions
- form
- defining, for Entry model / Defining a form for the Entry model
- creating, with view / A form with a view
- submissions, handling / Handling form submissions
- CSRF protection / SeaSurf and CSRF protection of forms
- SeaSurf protection / SeaSurf and CSRF protection of forms
- form submissions
- with AJAX / AJAX form submissions
- Frozen-Flask
- full-text search
- adding / Full-text search
G
- Gravatar
- about / Creating a comment model
- Gunicorn
I
- image uploads
- handling / Image uploads
- file uploads, processing / Processing file uploads
- template, creating / The image upload template
- index function
- about / Understanding the code
- index view
- building / Building the index view
- initial migration
- creating, for schema / Creating the initial migration
- IPython
- installing / Working with the Entry model
J
- Jinja2
- about / Introducing Jinja2
- homepage, creating / Introducing Jinja2
- template operations, performing / Basic template operations
- loops / Loops, control structures, and template programming
- control structures / Loops, control structures, and template programming
- template programming / Loops, control structures, and template programming
- built-in filters / Jinja2 built-in filters
- URL, for documentation / Creating a base template for the blog
L
- logging
- about / Logging and error reporting
- built-in logger / Logging
- to file / Logging to file
- custom log message, creating / Custom log messages
- levels / Levels
- reference link / Read more
- login view
- building / Login and logout views
- template, creating / The login template
- logout view
- building / Login and logout views
- coding / Logging out
- lookups
- using / Special lookups
- example / Special lookups
- loops, Jinja2
M
- macros
- about / The edit.html template
- reference link / The edit.html template
- Markdown
- about / The spec
- used, for editing / Simple editing with Markdown
- URL / Simple editing with Markdown
- mixins
- mocking, objects
- about / Mocking objects
- model
- about / Creating the Entry model
- models
- exposing / Exposing models through the Admin
- list views, customizing / Customizing the list views
- filters, adding to list view / Adding search and filtering to the list view
- search, adding to list view / Adding search and filtering to the list view
- Admin model forms, customizing / Customizing Admin model forms
- User form, enhancing / Enhancing the User form
- slugs, generating / Generating slugs
- multiple editors
- synchronizing / Synchronizing multiple editors
N
- negation
- about / Negation
- Nginx
- about / Nginx
- static files, serving / Serving static files
- with SSL support / Nginx
- Nginx web server
- using / Serving static files
O
- Object Relational Mapping (ORM)
- about / Introducing SQLAlchemy
- objects
- mocking / Mocking objects
- one() method
- versus first() method / Filtering the list of entries
- operator precedence
- about / Operator precedence
P
- pagination links
- adding / Adding pagination links
- postprocessing hooks
- using / Reading more
- postprocessors
- using / Preprocessors and postprocessors
- preprocessing hooks
- using / Reading more
- preprocessors
- using / Preprocessors and postprocessors
- Pro Git
- about / Creating the blog project
- URL / Creating the blog project
- Pygments
- used, for syntax highlighting / Syntax highlighting using Pygments
- Python's unit test module
- about / Python's unit test module
R
- Redis
- used, for caching / Caching with Flask-Cache and Redis
- URL / Caching with Flask-Cache and Redis
- relational database
- advantages / Why use a relational database?
S
- schema
- modifying / Making changes to the schema
- Flask-Migrate, adding / Adding Flask-Migrate to our project
- initial migration, creating / Creating the initial migration
- status column, adding / Adding a status column
- schema migration
- creating / Creating a schema migration
- SeaSurf protection
- Secure Socket Layer (SSL)
- about / Introducing the blog project
- sessions
- about / Sessions
- slugs
- generating / Generating slugs
- SQL
- reference link / Why use a relational database?
- SQLAlchemy
- about / Why use a relational database?
- benefits / Introducing SQLAlchemy
- online resources / Introducing SQLAlchemy
- installing / Installing SQLAlchemy
- using, in Flask app / Using SQLAlchemy in our Flask app
- database engine, selecting / Choosing a database engine
- connecting, to database / Connecting to the database
- URL, for documentation / Connecting to the database, Using backrefs
- SSL
- used, for securing site / Securing your site with SSL
- certificate request, generating / Getting your certificate
- with Apache httpd / Apache httpd
- with Nginx / Nginx
- with Gunicorn / Gunicorn
- standard context variables
- reference link / Full-text search
- static assets
- managing, via Flask-Admin / Managing static assets via the Admin
- static files
- serving / Serving static files
- static site
- creating / Creating secure, stable versions of your site by creating static content
- commenting / Commenting on a static site
- multiple editors, synchronizing / Synchronizing multiple editors
- status column
- adding, to schema / Adding a status column
- syntax highlighting
- with Pygments / Syntax highlighting using Pygments
T
- tagging system
- building / Building a tagging system
- tags, adding from entries / Adding and removing tags from entries
- tags, removing from entries / Adding and removing tags from entries
- backrefs, using / Using backrefs
- tags
- listing / Listing all the tags
- saving, on posts / Saving and modifying tags on posts
- modifying, on posts / Saving and modifying tags on posts
- template, Flask-Admin
- about / Flask-Admin templates
- blocks / Flask-Admin templates
- using / Flask-Admin templates
- template programming
- test-driven development (TDD)
- about / Python's unit test module
- testing configuration file
- creating / Test-friendly configuration
- tests, Jinja2
- Traceback
- about / Debugging Flask applications
U
- unit testing
- about / Unit testing
- Python's unit test module / Python's unit test module
- example / A simple math test
- with Flask / Flask and unit testing
- page, testing / Testing a page
- API, testing / Testing an API
- references / Read more
- URL scheme
- creating / Creating a URL scheme
- purpose / Creating a URL scheme
- structure / Creating a URL scheme
- URL routes, defining / Defining the URL routes
- index view, building / Building the index view
- detail view, building / Building the detail view
- entries, listing for given tag / Listing entries matching a given tag
- tags, listing / Listing all the tags
- full-text search, adding / Full-text search
- user's drafts
- displaying / Displaying a user's drafts
- User form
- enhancing / Enhancing the User form
- user model
- creating / Creating a user model
- email (unique) field / Creating a user model
- password_hash field / Creating a user model
- name field / Creating a user model
- slug field / Creating a user model
- active field / Creating a user model
- created_timestamp field / Creating a user model
- user objects
- creating / Creating user objects
- uWSGI
- about / Nginx
V
- validator
- view
- form, creating / A form with a view
- view access
- restricting / Restricting access to views
- entry's author, storing / Storing an entry's author
- author, setting on blog entries / Setting the author on blog entries
- edit view, protecting / Protecting the edit and delete views
- delete view, protecting / Protecting the edit and delete views
- user's drafts, displaying / Displaying a user's drafts
- users draft's, displaying / Displaying a user's drafts
W
- WSGI server
- Flask, running / Running Flask with a WSGI server
- Apache's httpd / Apache's httpd
- Nginx / Nginx
- WTForms
- about / Getting started with WTForms
- installing / Getting started with WTForms
- form, defining for Entry model / Defining a form for the Entry model
- form, creating with view / A form with a view
- create.html template, creating / The create.html template
- form submissions, handling / Handling form submissions
- error messages, validating / Validating input and displaying error messages
- error messages, displaying / Validating input and displaying error messages
- existing entries, editing / Editing existing entries
- edit.html template, creating / The edit.html template
- entries, deleting / Deleting entries
- cleaning up / Cleaning up