As I start this document, I'm quite new to Flask, this is how I use it for my own project.

debrice 2012-02-02 20:49:46 -08:00
parent c8d18b85a9
commit 556526caec

61
Large-app-how-to.md Normal file

@ -0,0 +1,61 @@
This document is an attempt to describe the first step of a large project structure with flask and some basic modules:
* SQLAlchemy
* WTF (What The Form)
Please feel free to fix and add you own tips.
# Installation
## Flask
[http://flask.pocoo.org/docs/installation/](Flask Installation)
I recommend using virtual env: easy and allow multiple environment on the same machine and doesn't even require you to have super user right on the machine (as the libs are localy installed).
## Flask-SQLAlchemy
SQL provide an easy and advanced way to serialize your object to different type of relational database. In your virutal env, install SQLAlchemy from pip:
pip install flask-sqlalchemy
## Flask-WTF
WTF (What the Form) Provides a easy way to handle user's data submission.
pip install Flask-WTF
# Overview
Ok, so from now, we should have all the libs ready. Here the folder structures:
config.py
run.py
shell.py
app.db
app/__init__.py
app/constants.py
For every module (or sub app... ) well have this file structure (here for the users module)
app/users/__init__.py
app/users/views.py
app/users/forms.py
app/users/constants.py
app/users/models.py
app/users/decorators.py
We'll create 4 modules, a user module (manage user's registration, login, password lost, profile edit and maybe Third party Login/Registration) an email sub module intended to be used by a queuing server, and a post and comments modules
## Config
`run.py` will be used to launch the web server.
from tol import app
app.run(debug=True)
`shell.py` will allow you to get a console and enter commands within your flask environment. Maybe not as nice as debugging with pdb, but always usefull (when you will initialize your database)
#!/usr/bin/env python
import os
import readline
from pprint import pprint
from flask import *
from app import *
os.environ['PYTHONINSPECT'] = 'True'