1. 程式人生 > >使用藍圖建立flask專案結構

使用藍圖建立flask專案結構

程式目錄結構

flask/
	|-- app/  # 程式包,程式的主體檔案都包含在內
		|-- main/
			|-- __init__.py
			|-- views.py
			|-- errors.py
		|-- templates/
			|-- index.html
		|-- static/
		|-- __init__.py
	|--config.py   # 配置選項
	|--manage.py	# 程式啟動指令碼
	|--requirements.txt	# 需求檔案

配置選項

config.py

# 程式的配置
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

文章完結
@快樂是一切