1、項目結構html
|-flasky |-app Flask程序通常都保存在這裏 |-templates/ |-static/ |main/ |-__init__.py |-errors.py |-forms.py |-views.py |-__init__.py |-email.py 電子郵件函數 |-models.py 數據庫模型 |-migrations/ 包含數據庫遷移的腳本 |-tests/ 單元測試 |-__init__.py |test*.py |-venv/ 包含Python虛擬環境 |requirements.txt 列出全部依賴包 |config.py 存儲配置 |manage.py 用於啓動程序
2、config.py程序配置(實例)sql
基類中包含通用配置,子類分別定義了專用配置shell
import os basedir = os.path.abspath(os.path.dirname(__file__)) class Config : SECRET_KEY = os.environ.get('SECRET_KEY') or 'hard to guess string' SQLALCHEMY_COMMIT_ON_TEARDOWN = True FLASKY_MAIL_SUBJECT_PREFIX = '[Flasky]' FLASKY_MAIL_SENDER = 'Flasky Admin <flasky@example.com>' FLASKY_ADMIN = os.environ.get('FLASKY_ADMIN') @staticmethod def init_app(app): pass class DevelopmentConfig(Config): DEBUG = True MAIL_SERVER = 'smtp.cooglemail.com' MAIL_PORT = 587 MAIL_USE_TLS = True MAIL_USERNAME = os.environ.get('MAIL_ISERNAME') MAIL_PASSWORD = os.environ.get('MAIL_PASSWORD') SQLALCHEMYU_DATABASE_URL = os.environ.get('SQLALCHEMYU_DATABASE_URL') or 'sqlite:///' + os.path.join(basedir,'data.sqlite') class TestingConfig(Config): TESTING = True SQLALCHEMYU_DATABASE_URL = os.environ.get('TEST_DATABASE_URL') or 'sqlite:///' + os.path.join(basedir,'data-test.sqlite') class ProductionConfig(Config): SQLALCHEMYU_DATABASE_URL = os.environ.get('DATABASE_URL') or 'sqlite:///' + os.path.join(basedir,'data.sqlite') config = { 'development' : DevelopmentConfig, 'testing' : TestingConfig, 'production' : ProductionConfig, 'default' : DevelopmentConfig }
3、程序工廠函數數據庫
4、藍本實現程序功能flask
**在藍本中編寫錯誤處理程序稍有不一樣,若是使用errorhandler修飾器,那麼只有藍本中的錯誤才能出發處理程序,要想註冊程序全局的錯誤處理程序,必須使用app_eerrorhandlersession
(1)app/main/views.py藍本定義的程序路由app
from datetime import datetime from flask import render_template,session,redirect,url_for #下面引用的函數是錯誤的,多是未在Flask框架下 from . import main from .forms import NameForm from .. import db from ..models import User @main.route('/',menthods=['GET','POST']) def index(): form = NameForm() if form.validate_on_sumbit(): #... return redirect(url_for('.index')) return render_template('index.html',form=form,name=session.get('name'),known=session.get('known',False),current_time=datetime.utcnoww())
5、啓動腳本(manage.py) 框架
import os from app import create_app,db from app.models import User,Role from flask.ext.script import Manager,Shell from flask.ext.migrate import Migrate,MigrateCommand app = create_app(os.getenv('FLASK_CONFIG') or 'default') manager = Manager(app) migrate = Migrate(app) def make_shell_context(): return dict(app=app,db=db,User=User,Role=Role) manager.add.command('shell',Shell(make_context=make_shell_context)) manager.add.command('db',MigrateCommand) if __name__ == '__main__': manager.run()
**這個腳本先建立程序,若是定義了環境變量FLASK_CONFIG,則從中讀取配置名;不然使用默認配置,而後初始化Flask-Script,Flask-Migrate和位Python shell定義的上下文。函數
6、需求文件(requirements.txt)單元測試
requirements.txt文件,用戶記錄全部依賴包機器精準的版本號
安裝對應依賴包的版本號: pip install -r requirements.txt
7、單元測試(test.py)