网站首页 > 技术文章 正文
在Flask中,通常不强制遵循MVC模式,因为它是一个灵活的微框架。然而,你可以模仿MVC的结构来组织你的Flask项目。以下是如何在Flask项目中模拟MVC结构的一个例子:
项目目录结构
my_flask_app/
│
├── app.py
├── config.py
├── models.py
├── routes.py
├── static/
│ ├── css/
│ ├── js/
│ └── images/
├── templates/
│ ├── base.html
│ ├── index.html
│ └── user/
│ ├── register.html
│ ├── login.html
│ └── profile.html
└── venv/
主要文件和模块职责
app.py: 这是主要的入口点文件,通常包含创建和运行Flask应用的实例。
config.py: 配置文件,可以存放数据库配置、密钥、上传文件设置等。
models.py: 模型相关的代码,负责与数据库交互。
routes.py: 路由定义的地方,包含了所有的视图函数。
static/: 存放前端静态文件,如CSS样式表、JavaScript文件和图片。
templates/: 存放Jinja2模板文件,用于生成HTML页面。
模型 (Model)
在models.py文件中,你会有数据库模型的定义。例如,你可能有一个User模型来表示用户数据:
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64), unique=True, nullable=False)
password_hash = db.Column(db.String(128), nullable=False)
# 其他字段...
视图 (View)
在routes.py文件中,你将定义URL规则以及处理这些URL的视图函数。例如:
from flask import render_template, url_for, redirect, request
from app import app
from models import User
@app.route('/')
def index():
return render_template('index.html')
@app.route('/login', methods=['GET', 'POST'])
def login():
# 登录逻辑...
return render_template('user/login.html')
视图 (Template)
在templates文件夹中,你会有HTML模板文件。例如,一个简单的登录页面login.html可能看起来像这样:
Login
Login Form
{{ form.hidden_tag() }}
{{ form.username.label }}
{{ form.username(size=20) }}
{{ form.password.label }}
{{ form.password }}
请注意,虽然这个结构模仿了MVC,但在Flask中,模型和视图通常不会被封装在单独的类或控制器中,而是直接在models.py和routes.py文件中定义。视图函数通常非常简洁,并且直接处理业务逻辑和模板渲染。
猜你喜欢
- 2024-10-15 Python Flask Web表单(flask form表单)
- 2024-10-15 如何在Flask应用程序中使用JSON Web Tokens进行安全认证
- 2024-10-15 综合指南:将 Flask 与 MongoDB 结合使用
- 2024-10-15 python-flask搭建平台,HTML+CSS+JS写前端的web全栈-动画轮播
- 2024-10-15 Flask 表单处理(flask formdata)
- 2024-10-15 三、flask博客项目实战-之表单(flask 表单)
- 2024-10-15 flask python web开发的简单易学框架
- 2024-10-15 Flask-APScheduler使用教程(flask apscheduler)
- 2024-10-15 flask 项目中使用 bootstrapFileInput(进阶篇)
- 2024-10-15 基于flask框架展示数据可视化的一次尝试
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)