Flask:对项目文件进行拆分
在工作中,我们不可能将ORM的配置,ORM的操作,ORM的使用以及视图放到同一个文件里,大多数时候Flask都是按照MVC的设计理念进行部署的
1、MVC和MTV
(1)MVC(Model-View-Controller,模型-视图-控制器)
MVC是一种web架构的模式
特点:把业务逻辑、模型数据、用户界面分离开来,让开发者将数据和表现解耦
Model:代表数据存取层
View:代表的是系统中选择显示什么和怎么显示的部分
Controller:指的是系统中根据用户输入及视需要访问模型,以决定使用哪个视图的哪部分
(2)MTV(Model-Templates-View,模型-模板-视图)
Model:数据存取层。该层处理与数据相关的所有事物,包括数据如何存取,如何验证有效,是一个抽象层。用来构建和操作你的web应用中的数据,模型是你的数据的唯一的、权威的信息源。它包含你所存取数据的必要字段和行为。通常,每个模型对应你数据库中唯一的一张表
Templates:表现层。该层处理与表现相关的决定,比如如何在页面和其他页面文档上进行显示。该层提供了设计友好的语法来展示信息给用户。使用模板方法可以动态的生成HTML。模板包含所需HTML输出的静态部分,以及一些特殊的语法,描述如何将动态内容插入
Views:业务逻辑层。该层包含存取模型及调取恰当模板的相关逻辑,用于封装负责处理用户请求及返回响应的逻辑。视图可以看做是前端以及数据库的中间人,它会将用户想要的信息从数据库里读取出来给前端,它也会将用户想保存的数据存储到数据库
2、Flask项目文件的拆分——头文件main.py
头文件main.py负责生成应用,加载数据库配置
import os
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import pymysql pymysql.install_as_MySQLdb() # 创建一个应用
app = Flask(__name__) BASE_DIR = os.path.abspath(os.path.dirname(__file__)) # 链接数据库
app.config["SQLALCHEMY_DATABASE_URI"] = "mysql+mysqlconnector://root:123456@localhost/flaskdb"
# 请求结束之后自动提交
app.config["SQLALCHEMY_COMMIT_ON_TEARDOWN"] = True
# 跟踪修改
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = True models = SQLAlchemy(app)
3、Flask项目文件的拆分——模型文件models.py
模型文件models.py用于数据库的建模,数据表的生成等
from main import models class BaseModel(models.Model):
__abstract__ = True # 声明当前类为抽象类,被继承调用不被创建
id = models.Column(models.Integer, primary_key=True, autoincrement=True) def save(self):
db = models.session()
db.add(self)
db.commit() def delete(self):
db = models.session()
db.delete(self)
db.commit() class Test(BaseModel):
__tablename__ = "test"
id = models.Column(models.Integer, primary_key=True)
name = models.Column(models.String(32))
time = models.Column(models.Date)
4、Flask项目文件的拆分——总控制文件manage.py
import sys
from models import models
from views import app # 获取当前文件名后所跟命令名字
command = sys.argv[1] if command == "migrate":
models.create_all() if command == "runserver":
app.run(host="127.0.0.1", port=, debug=True)
5、Flask项目文件的拆分——视图文件views.py
视图文件views.py用于存放视图函数
from main import app
from flask import render_template @app.route("/index/", methods=["GET", "POST"])
def index():
return render_template("index.html", **locals())
6、Flask配置文件settings.py
(1)第一种写法
main.py
# 链接数据库
app.config["SQLALCHEMY_DATABASE_URI"] = "mysql+mysqlconnector://root:123456@localhost/flaskdb"
# 请求结束之后自动提交
app.config["SQLALCHEMY_COMMIT_ON_TEARDOWN"] = True
# 跟踪修改
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = True
比较直观,适合小型项目
(2)第二种写法
编写配置文件settings.py
import os BASE_DIR = os.path.abspath(os.path.dirname(__file__)) SQLALCHEMY_DATABASE_URI = "mysql+mysqlconnector://root:123456@localhost/flaskdb"
SQLALCHEMY_COMMIT_ON_TEARDOWN = True
SQLALCHEMY_TRACK_MODIFICATIONS = True DEBUG = True
使用配置文件
main.py
app = Flask(__name__)
app.config.from_pyfile("settings.py")
(3)第三种写法
使用类对象
settings.py
import os BASE_DIR = os.path.abspath(os.path.dirname(__file__)) class Config:
SQLALCHEMY_DATABASE_URI = "mysql+mysqlconnector://root:123456@localhost/flaskdb"
SQLALCHEMY_COMMIT_ON_TEARDOWN = True
SQLALCHEMY_TRACK_MODIFICATIONS = True
DEBUG = True class RunConfig(Config):
DEBUG = False
使用配置
main.py
app.config.from_object("settings.Config")
最新文章
- WinFrom窗体始终置顶
- 视频聊天APP
- Retrofit 2.0使用
- 统计《ASP.Net特供视频教程》总长度
- sql语句查询数据库表结构信息
- codeforces.com/problemset/problem/213/C
- 【Apache运维基础(3)】虚拟主机配置说明
- PHP header 的几种用法
- 绘制数据图表的又一利器:C3.js
- iOS指纹识别
- 修改AspNetSqlMembershipProvider的密码规则
- [LeetCode]题解(python):126-Word Ladder II
- linux下常见问题
- C++第二篇--访问控制
- lglob-lua 静态检查脚本
- [Luogu P1144]最短路计数
- Kali学习笔记3:TCPDUMP详细使用方法
- JS 数组中对象去重 reduce 用法
- eclipse使用struts2找不到action方法或找不到action的错误记录
- WEB测试用例设计总结
热门文章
- linux查看cpu核数和内存指令
- Centeos7搭建selenium+Chrome浏览器
- 洛谷:P3950 部落冲突
- Spring Boot 2.x 基础案例:整合Dubbo 2.7.3+Nacos1.1.3(最新版)
- 阿里云DLA工具 查询tablestore数据
- 超大规模商用 K8s 场景下,阿里巴巴如何动态解决容器资源的按需分配问题?
- B-概率论-条件概率
- 想转行做程序员,目前想学WEB前端,想问该自学还是报培训班
- [JZOJ4737] 【NOIP2016提高A组模拟8.25】金色丝线将瞬间一分为二
- [Luogu1313][NOIP2011提高组]计算系数