Skip to content
This repository
Fetching contributors…

Octocat-spinner-32-eaf2f5

Cannot retrieve contributors at this time

file 84 lines (62 sloc) 3.096 kb

Step 2: Application Setup Code

Now that we have the schema in place we can create the application module. Let's call it flaskr.py inside the flaskr folder. For starters we will add the imports we will need as well as the config section. For small applications it's a possibility to drop the configuration directly into the module which we will be doing here. However a cleaner solution would be to create a separate .ini or .py file and load that or import the values from there.

# all the imports
import sqlite3
from flask import Flask, request, session, g, redirect, url_for, \
     abort, render_template, flash

# configuration
DATABASE = '/tmp/flaskr.db'
DEBUG = True
SECRET_KEY = 'development key'
USERNAME = 'admin'
PASSWORD = 'default'

Next we can create our actual application and initialize it with the config from the same file:

# create our little application :)
app = Flask(__name__)
app.config.from_object(__name__)

:meth:`~flask.Config.from_object` will look at the given object (if it's a string it will import it) and then look for all uppercase variables defined there. In our case, the configuration we just wrote a few lines of code above. You can also move that into a separate file.

System Message: ERROR/3 (<string>, line 35); backlink

Unknown interpreted text role "meth".

It is also a good idea to be able to load a configuration from a configurable file. This is what :meth:`~flask.Config.from_envvar` can do:

System Message: ERROR/3 (<string>, line 40); backlink

Unknown interpreted text role "meth".
app.config.from_envvar('FLASKR_SETTINGS', silent=True)

That way someone can set an environment variable called :envvar:`FLASKR_SETTINGS` to specify a config file to be loaded which will then override the default values. The silent switch just tells Flask to not complain if no such environment key is set.

System Message: ERROR/3 (<string>, line 46); backlink

Unknown interpreted text role "envvar".

The secret_key is needed to keep the client-side sessions secure. Choose that key wisely and as hard to guess and complex as possible. The debug flag enables or disables the interactive debugger. Never leave debug mode activated in a production system because it will allow users to execute code on the server!

We also add a method to easily connect to the database specified. That can be used to open a connection on request and also from the interactive Python shell or a script. This will come in handy later

def connect_db():
    return sqlite3.connect(app.config['DATABASE'])

Finally we just add a line to the bottom of the file that fires up the server if we want to run that file as a standalone application:

if __name__ == '__main__':
    app.run()

With that out of the way you should be able to start up the application without problems. When you head over to the server you will get an 404 page not found error because we don't have any views yet. But we will focus on that a little later. First we should get the database working.

Externally Visible Server

Want your server to be publically available? Check out the :ref:`externally visible server <public-server>` section for more information.

System Message: ERROR/3 (<string>, line 79); backlink

Unknown interpreted text role "ref".

Continue with :ref:`tutorial-dbinit`.

System Message: ERROR/3 (<string>, line 83); backlink

Unknown interpreted text role "ref".
Something went wrong with that request. Please try again.