flask工厂模式,给出最佳的项目布局
时间: 2023-07-28 17:23:31 浏览: 174
在 Flask 中使用工厂模式可以让应用更加灵活、可扩展性更高,以下是一个最佳的 Flask 项目布局:
```
project/
app/
__init__.py
models.py
views/
__init__.py
auth.py
main.py
templates/
base.html
index.html
auth/
login.html
register.html
static/
css/
js/
img/
config.py
tests/
__init__.py
test_views.py
run.py
requirements.txt
```
其中,`app` 目录下存放应用的代码,`tests` 目录下存放测试用例,`run.py` 是应用的入口文件,`requirements.txt` 存放应用的依赖包。
`app/__init__.py` 文件中创建 Flask 应用,初始化数据库、登录管理等扩展,注册蓝图等:
```
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager
db = SQLAlchemy()
login_manager = LoginManager()
def create_app():
app = Flask(__name__)
app.config.from_object('config')
db.init_app(app)
login_manager.init_app(app)
from .views.auth import auth_bp
from .views.main import main_bp
app.register_blueprint(auth_bp)
app.register_blueprint(main_bp)
return app
```
`app/models.py` 文件中定义数据库模型:
```
from . import db
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64), unique=True)
password_hash = db.Column(db.String(128))
def __repr__(self):
return '<User %r>' % self.username
```
`app/views/` 目录下存放视图函数,使用蓝图将不同功能的视图函数划分到不同的模块中:
```
from flask import Blueprint, render_template
main_bp = Blueprint('main', __name__)
@main_bp.route('/')
def index():
return render_template('index.html')
@main_bp.route('/about')
def about():
return render_template('about.html')
```
`app/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_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'data.sqlite')
SQLALCHEMY_TRACK_MODIFICATIONS = False
```
`tests/test_views.py` 文件中存放测试用例:
```
from flask import url_for
def test_index(client):
response = client.get(url_for('main.index'))
assert response.status_code == 200
assert b'Hello, World!' in response.data
```
`run.py` 文件中启动应用:
```
from app import create_app, db
from app.models import User
app = create_app()
@app.shell_context_processor
def make_shell_context():
return {'db': db, 'User': User}
```
以上是一个最佳的 Flask 项目布局,可以根据实际需求进行调整。
阅读全文