flask基本项目结构

|-- myproject
|-- config.py
|-- flask-env.yml
|-- manage.py
|-- app
| |-- models.py
| |-- __init__.py # 创建app实例的工厂函数
| |-- auth # auth蓝本
| | |-- forms.py
| | |-- views.py
| | |-- __init__.py
| | |-- templates
| |-- main # main蓝本
| | |-- errors.py
| | |-- forms.py
| | |-- views.py
| | |-- __init__.py
| |-- static
| | |-- css
| | |-- image
| | |-- js
| |-- templates
|-- migrations
|-- tests
| |-- __init__.py
|-- venv

1config.py

import os
basedir = os.path.abspath(os.path.dirname(__file__))


# 通用配置
class Config:
WTF_CSRF_SECRET_KEY = os.environ.get('WTF_CSRF_SECRET_KEY') or 'ao blog csrf key'
SECRET_KEY = os.environ.get('SECRET_KEY') or 'ao blog session key'
SQLALCHEMY_COMMIT_ON_TEARDOWN = True
SQLALCHEMY_TRACK_MODIFICATIONS = False

# 初始化Flask实例,对当前环境的配置初始化
@staticmethod
def init_app(app):
app.config['SECRET_KEY'] = SQLALCHEMY_COMMIT_ON_TEARDOWN
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = SQLALCHEMY_COMMIT_ON_TEARDOWN
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = SQLALCHEMY_COMMIT_ON_TEARDOWN
app.config['WTF_CSRF_SECRET_KEY'] = SQLALCHEMY_COMMIT_ON_TEARDOWN


# 开发环境配置
class DevelopmentConfig(Config):
DEBUG = True
# SQLALCHEMY_TRACK_MODIF = True
SQLALCHEMY_DATABASE_URI = os.environ.get('DEV_DATABASE_URL') or \
'sqlite:///' + os.path.join(basedir, 'data-dev.sqlite')


class TestingConfig(Config):
TESTING = True
SQLALCHEMY_DATABASE_URI = os.environ.get('DEV_DATABASE_URL') or \
'sqlite:///' + os.path.join(basedir, 'data-dev.sqlite')

class ProductionConfig(Config):
SQLALCHEMY_DATABASE_URI = os.environ.get('DEV_DATABASE_URL') or \
'sqlite:///' + os.path.join(basedir, 'data-dev.sqlite')

config = {
'dev': DevelopmentConfig,
'test': TestingConfig,
'prod': ProductionConfig,
'default': DevelopmentConfig
}
2manage.py 启动文件

import os


from flask_script import Manager, Shell
from flask_migrate import Migrate, MigrateCommand

from app import create_app
from app import db

app = create_app(os.getenv('FLASK_CONFIG') or 'default')
manager = Manager(app)
migrate = Migrate(app, db)


def make_shell_context():
return dict(app=app, db=db)


manager.add_command('shell', Shell( make_context = make_shell_context() ) )
manager.add_command('db', MigrateCommand)

if __name__ == '__main__':
manager.run()

3views.py 视图函数类

from datetime import datetime

from flask import render_template, session, redirect, url_for

from . import main # 导入蓝本


@main.route('/home', methods = ['GET', 'POST']) # 定义路由
def index():
return render_template('welcome.html')

4app/__init__.py

from flask import Flask, render_template
from flask_sqlalchemy import SQLAlchemy
from flask_wtf.csrf import CSRFProtect

from config import config

db = SQLAlchemy()
csrf = CSRFProtect()


# 创建Flask实例,注册第三方扩展,调用config.init_app初始化
def create_app(config_name):
app = Flask(__name__)
app.config.from_object(config[config_name])
config[config_name].init_app(app)

db.init_app(app)
csrf.init_app(app)

#注册蓝本
from .main import main as main_blueprint
from .auth import auth as auth_blueprint
app.register_blueprint(main_blueprint)
app.register_blueprint(auth_blueprint, url_prefix = '/auth')

return app

 

posted @   菩提浪子  阅读(255)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示