Two Flask Books by Miguel Grinberg

Originally Posted on with tags: flask / books
Last Update on

This static blog site started on Github one year ago on April 1, 2009. It has been one year, and it is going better than I originally planned. The most frequent visitor of the site is most likely myself, and the site serves as an online notepad for myself.

I recently finished reading two Flask books by Miguel Grinberg. The first one is Flask Web Development - Developing Web Applications with Python, and the second book is The new and Improved Flask Mega Tutorial. Both books are fantastic. They are better than every Django book I have read, and they are definitely among the top programming books.

Flask books

Here are some tips to work with the Flask Web Development source code flasky.

$ git clone https://github.com/miguelgrinberg/flasky.git
$ git checkout 8e
$ git checkout -b exercise
$ python -m venv venv
$ source venv/bin/activate
$ pip3 install -r requirements.txt
$ source setup.sh  # content see below
$ flask db upgrade
$ flask run

The setup.sh file sets two environment variables.

export FLASK_APP=flasky.py
export FLASK_DEBUG=1
echo "setup FLASK_APP and FLASK_DEBUG"

If you run the commands above, the flask app will prompt errors because the configuration for the email smtp server is not complete. It is easier to setup a local smtp testing server than setup email accounts. Open a new terminal window and type the command below. The command invokes a standard python module smtpd and starts a debugging email server.

$python -m smtpd -n -c DebuggingServer localhost:8025

In the config.py file, add three lines to the DevelopmentConfig section.

class DevelopmentConfig(Config):
    DEBUG = True
    SQLALCHEMY_DATABASE_URI = os.environ.get('DEV_DATABASE_URL') or \
        'sqlite:///' + os.path.join(basedir, 'data-dev.sqlite')
    MAIL_SERVER = os.environ.get('MAIL_SERVER', 'localhost')  ### NEW
    MAIL_PORT = int(os.environ.get('MAIL_PORT', '8025'))
    MAIL_USE_TLS = False

You also need to initialize database when running the code base after Chapter 9 and Chapter 12. The commands are shown below.

$ flask shell
>>> Role.insert_roles()
>>> User.add_self_follows()