文章目录
- 前言
- 一、中型flask目录
- 二、大型flask目录
- 1.启动文件run.py定义
- 2.实例创建文件定义(`app/__init__.py`)
- 3.配置项config.py
- 4. app/routes下的`__init__.py`
- 5. 定义一个路由并写一个静态页面
- 6. 模型文件
- 7.static目录
- 8.requirements.txt依赖
- 3.flask!启动!
前言
前面用一个app.py实现了一个简单项目,但是都在一个文件里面没办法做模块区分,接下来我们实现一个中小型和大型的flask目录
一、中型flask目录
先看图,目录结构大体如下
在flask/app目录下我们定义__init__.py
来定义实例创建方法
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_redis import FlaskRedis
def create_app():
app = Flask(__name__)
# 导入配置
app.config.from_object('config.Config')
# 实例化数据库对象
db = SQLAlchemy(app)
# 实例化redis对象
redis_client = FlaskRedis(app)
# 引入路由 blueprint
from . import routes
app.register_blueprint(routes.bp)
return app
config.py为配置项,配置如下
class Config:
# Debug模式
DEBUG = True
# SECRET_KEY 密钥
SECRET_KEY = '631ada96b1246c6ca3a92ee8e85f5393734509313cdbc59f42527b433c5fe61d'
# 数据库配置
SQLALCHEMY_DATABASE_URI ='mysql+pymysql://root:123456@localhost:3306/flask_demo'
SQLALCHEMY_TRACK_MODIFICATIONS = False
# Redis配置
REDIS_URL ='redis://localhost:6380/0'
requirements.txt为依赖项,目前咱们只用到一个flask
Flask==2.2.3
最外层的run.py是我们启动文件,内容如下
from app import create_app
app = create_app()
if __name__ == '__main__':
app.run('0.0.0.0', 8000, debug=True)
接下来我们在routes.py定义一个简单的路由来试试能不能访问这个应用
from flask import Blueprint
bp = Blueprint('main', __name__)
@bp.route('/')
def index():
return 'Hello, World!'
# 404错误处理
@bp.errorhandler(404)
def page_not_found(e):
return 'This page does not exist', 404
# 500错误处理
@bp.errorhandler(500)
def internal_server_error(e):
return 'Internal Server Error', 500
在项目根目录执行python run.py
二、大型flask目录
对于较大的应用,可能需要更复杂的项目结构,以支持更高的模块化和扩展性
还是老样子先上目录
1.启动文件run.py定义
from app import create_app, db
app = create_app()
# 执行数据库迁移
with app.app_context():
db.create_all()
if __name__ == '__main__':
app.run('0.0.0.0', 8000, debug=True)
这部分基本跟前面一样
2.实例创建文件定义(app/__init__.py
)
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_redis import FlaskRedis
# 实例化数据库对象
db = SQLAlchemy()
def create_app():
app = Flask(__name__)
# 导入配置
app.config.from_object('config.Config')
db.init_app(app)
# 实例化redis对象
redis_client = FlaskRedis(app)
# 注册蓝图 with是上下文管理器,可以自动调用__enter__和__exit__方法
# 使用 with app.app_context():来获取上下文,调用蓝图
with app.app_context():
from .routes import bp
app.register_blueprint(bp)
return app
上下文管理器是 Python 中一种用于管理资源的工具,它通过定义一个上下文(context)来简化资源的管理,比如文件操作、数据库连接、网络连接等,上下文管理器确保在代码块执行完毕后,资源能够被正确释放,即使在执行过程中发生了异常,这里咱们后期再研究,目前已知是用这个咱们可以正确注册蓝图
3.配置项config.py
class Config:
# Debug模式
DEBUG = True
# SECRET_KEY 密钥
SECRET_KEY = '631ada96b1246c6ca3a92ee8e85f5393734509313cdbc59f42527b433c5fe61d'
# 数据库配置
SQLALCHEMY_DATABASE_URI ='mysql+pymysql://root:123456@localhost:3306/flask_demo'
SQLALCHEMY_TRACK_MODIFICATIONS = False
# Redis配置
REDIS_URL ='redis://localhost:6380/0'
config.py基本还是保持一致,因为他的作用是写配置的
4. app/routes下的__init__.py
# 在这里 import 所有路由模块
from .main import bp
5. 定义一个路由并写一个静态页面
在app/routes目录下的main.py写入内容
from flask import Blueprint, render_template
bp = Blueprint('main', __name__)
@bp.route('/')
def index():
return render_template('index.html')
在templates文件夹下面写入html内容
<!DOCTYPE html>
<html>
<head>
<title>Welcome to my website</title>
</head>
<body>
<h1>Welcome to my website</h1>
<p>This is a sample website created using Flask.</p>
</body>
</html>
6. 模型文件
在app/models下面有一个__init__.py
,我们可以做一些操作比如
# app/models/__init__.py
from flask_sqlalchemy import SQLAlchemy
# 创建一个 SQLAlchemy 实例
db = SQLAlchemy()
# 从当前模块导入所有模型
from .user import User
# 添加其他模型的导入
这个时候我们定义一个user模型(user.py)
from . import db
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
def __repr__(self):
return f'<User {self.username}>'
7.static目录
这个目录就不多解释了,放静态资源文件入js/css/图片等文件
比如你在app/static/js下有一个main.js
// main.js
function showAlert() {
alert("Hello! This is a popup message.");
}
在页面中调用如下(使用{{ url_for('static', filename='js/main.js') }}
)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Popup Example</title>
<script src="{{ url_for('static', filename='js/main.js') }}"></script>
</head>
<body>
<h1>Popup Example</h1>
<button onclick="showAlert()">Click me</button>
</body>
</html>
8.requirements.txt依赖
之前安装依赖一直都是缺一个安装一个,其实我们可以在这个文件里面把需要的依赖都写上去,例如:
Flask
Flask-SQLAlchemy
pymysql
然后我们只想下面的命令就可以安装了,这样就可以批量安装了
pip install -r requirements.txt
3.flask!启动!
在项目根目录执行命令python run.py
这里实现了基本的flask应用,后续我们继续在这个目录基础上实现如何完整跑一个项目