One way to host

A Flask web app on Heroku

(And a bunch of ways not to)

Aka. Don't be lazy, just use a database.

Planigale..

is a guessing game for matching a photo of a cute critter with their genus and species made by Lin Taylor and myself during the first half of W1.

 

Progression

  • Take cute critter data from an API source
  • Create console game using OOP
  • Adapt the console game to a web based flask application running locally
  • Pretify the layout and styling for the app
  • Host the application on heroku

Current Architecture

  • Application Code - Python w/ Flask & Jinja2
  • Container - Gunicorn
  • Storage - Redis
  • Host - Heroku

Flask is awesome

  • Annotations
  • Sessions
  • G (a helpful but sometimes confusing global)

Redis is awesome

  • Easy to set up key-value store
  • Enables server side sessions

Serialization/deserialization..

can be tricky

  • Not straightforward with nested class structure (OOP!!)
  • Used jsonpickle to make serialization easy
  • Deserialization needed careful definition of constructors. Be careful of:
    • Equality tests that rely object references
    • Updates that rely upon object references

Things that work fine locally..

but not on Heroku/Gunicorn

  • Random secret key for sessions.

  • Global variables for storing application state.

  • Pickle for serializing / deserializing objects. Just use JSON.

  • Defining global functions in jinja2 template to reference python built-ins.

Other gotchas..

that just don't work

  • Cookies are limited to 4 KB in size, so are your flask client side sessions - be mindful about what objects you're storing in session.

  • But.. Free tier of Redis to Go is limited to 5 MB. So try to limit the amount of data that you store on the server side as well.

fin.

Made with Slides.com