使用藍圖建立flask專案結構
阿新 • • 發佈:2018-11-09
程式目錄結構
flask/
|-- app/ # 程式包,程式的主體檔案都包含在內
|-- main/
|-- __init__.py
|-- views.py
|-- errors.py
|-- templates/
|-- index.html
|-- static/
|-- __init__.py
|--config.py # 配置選項
|--manage.py # 程式啟動指令碼
|--requirements.txt # 需求檔案
配置選項
# 程式的配置
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 <[email protected]>'
FLASKY_ADMIN = os.environ.get('FLASKY_ADMIN')
@staticmethod # 使類不需要例項化就可以被呼叫
def init_app(app):
pass
class DevelopmentConfig(Config):
DEBUG = True
MAIL_SERVER = 'smtp.googlemail.com'
MAIL_PORT = 587
MAIL_USE_TLS = True
MAIL_USERNAME = os.environ.get('MAIL_USERNAME')
MAIL_PASSWORD = os.environ.get('MAIL_PASSWORD')
SQLALCHEMY_DATABASE_URI = os.environ.get('DEV_DATABASE_URL') or \
'sqllite:///' + os.path.join(basedir, 'data-dev.sqlite')
class ProductionConfig(Config):
SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') or \
'sqlite:///' + os.path.join(basedir, 'data.sqlite')
class TestingConfig(Config):
TESTING = True
SQLALCHEMY_DATABASE_URI = os.environ.get('TEST_DATABASE_URL') or \
'sqlite:///' + os.path.join(basedir, 'data-test.sqlite')
config = {
'development' : DevelopmentConfig,
'testing' : TestingConfig,
'production' : ProductionConfig,
'default' : DevelopmentConfig
}
程式包 APP/
使用程式工廠函式
app/__init__.py
# -*- coding: utf-8 -*-
from flask import Flask, render_template
from flask_bootstrap import Bootstrap
from flask_mail import Mail
from flask_moment import Moment
from config import config
bootstrap = Bootstrap()
mail = Mail()
moment = Moment()
def create_app(config_name):
'''程式的工廠函式'''
app = Flask(__name__)
app.config.from_object(config[config_name])
config[config_name].init_app(app)
# 初始化擴充套件
bootstrap.init_app(app)
mail.init_app(app)
moment.init_app(app)
# 註冊藍本
from .main import main as main_blueprint
app.register_blueprint(main_blueprint)
return app
建立藍本
app/main/__init__.py
# -*- coding: utf-8 -*-
# 建立藍本
from flask import Blueprint
main = Blueprint('main', __name__)
from . import views, errors
定義藍本中的路由
app/main/views.py
# -*- coding: utf-8 -*-
# 藍本中定義的程式路由
from datetime import datetime
from flask import render_template, session, redirect, url_for
from . import main
@main.route('/', methods=['GET', 'POST'])
return "hello world"
定義藍本中的錯誤處理程式
app/main/errors.py
# -*- coding: utf-8 -*-
# 藍本中的錯誤處理程式
from flask import render_template
from . import main
# 如果使用 errorhandler 修飾器,那麼只有藍本中的
# 錯誤才能觸發處理程式。要想註冊程式全域性的錯誤處理程式,必須使用 app_errorhandler
@main.app_errorhandler(404)
def page_not_found(e):
return render_template('404.html'), 404
@main.app_errorhandler(500)
def internal_server_error(e):
return render_template('500.html'), 500
啟動指令碼
manage.py
# -*- coding: utf-8 -*-
# 啟動指令碼
import os
from app import create_app
app = create_app(os.getenv('FLASK_CONFIG') or 'default')
if __name__ == '__main__':
app.run()
需求檔案
程式中必須包含一個 requirements.txt 檔案,用於記錄所有依賴包及其精確的版本號。如果
要在另一臺電腦上重新生成虛擬環境, 這個檔案的重要性就體現出來了,例如部署程式時
使用的電腦。 pip 可以使用如下命令自動生成這個檔案:
(venv) $ pip freeze >requirements.txt
文章完結
@快樂是一切