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")
Flask:对项目文件进行拆分的更多相关文章
- 阿里云部署 Flask + WSGI + Nginx 详解
抵不住朋友的诱惑,今天终于入手了一台阿里云服务器,是Ubuntu 1.4 32位版本,最初考虑是用来尝尝鲜只是买了个最低配的,价格算起来与在国外买个空间的价格相当吧(可能一年才贵100多),但用起来感 ...
- 标准的Flask启动文件
最近有一些同学问了我一些项目结构的问题 所以今天给大家专门讲解 解耦后的项目 目录我会分为两种方式:一种是普通解耦 一种是多mvc解耦 首先 我没先建立我们程序的文件夹并且在这个文件夹内写一个和这个文 ...
- 阿里云部署 Flask + uWSGI + Nginx
一.引言 今天入手了一台阿里云服务器,是centeros 7.5版本.本文解决的是 Flask 的部署问题.假设你的Flask的应用已经完成,现在只是部署的问题,本文以部署我的二次开发微信订阅号的项目 ...
- 阿里云部署 Flask + WSGI + Nginx 转载详解
我采用的部署方案是: Web 服务器采用 uwsgi host Flask 用 Supervisor 引用 uwsgi 作常规启动服务 基于 Nginx 作反向代理 首先, 阿里云服务器可以通过 SS ...
- 编写一个简单的flask的前后端交互的网页(flask简单知识的讲解)
实验原理: 1.什么是flask Flask是一个使用Python编写的轻量级Web应用框架,其WSGI工具采用Werkzeng,模板引擎使用Jinja2.Flask与 Django之间的区别就是Dj ...
- flask 之(五) --- 对象|钩子|拆分
内置对象 request: 请求的所有信息 session 服务端会话技术的接口 config: 当前项目的配置信息,模板中可以直接使用 g:global 在单次请求过程中,实现全局数据共享 ...
- Flask整合WebLoader 用于大附件拆分上传再合并
博客:https://blog.csdn.net/jinixin/article/details/77545140 github:https://github.com/jinixin/upload-d ...
- Flask 中蓝图的两种表现形式
最近在学Flask,特有的@X.route 很适合RESTfuld API, 一般小型应用,在一个py文件中就可以完成,但是维护起来比较麻烦. 想体验Django那样的MVT模式, 看到 Flask提 ...
- Flask项目之手机端租房网站的实战开发(二)
说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 接着上一篇博客继续往下写 :https://blog.csdn.net/qq_41782425/article/details/8 ...
随机推荐
- 对vue nextTick深入理解-vue性能优化、DOM更新时机、事件循环机制
一.定义[nextTick.事件循环] nextTick的由来: 由于VUE的数据驱动视图更新,是异步的,即修改数据的当下,视图不会立刻更新,而是等同一事件循环中的所有数据变化完成之后,再统一进行视图 ...
- 如何设置eclipse自动提示功能
1.Window --> preferences 2.java --> Editor --> Content Assist 3.将Auto activation triggers f ...
- .net core 3.0 Signalr - 03 使用MessagePack压缩传输内容
## MessagePack基础介绍 Signalr默认使用的是json形式传递数据,但是signalr提供了灵活的扩展,支持MessagePack形式序列化数据,以增加性能降低网络传输的效果,极大的 ...
- python线程实现异步任务
了解异步编程 楼主在工作中遇到了以下问题,开发接口爬取数据代码完成之后要写入redis缓存,但是在写入缓存的过程花费2-3s,进行这样就大大影响了接口的性能,于是想到了使用异步存储. 传统的同步编程是 ...
- WebGL简易教程(七):绘制一个矩形体
目录 1. 概述 2. 示例 2.1. 顶点索引绘制 2.2. MVP矩阵设置 2.2.1. 模型矩阵 2.2.2. 投影矩阵 2.2.3. 视图矩阵 2.2.4. MVP矩阵 3. 结果 4. 参考 ...
- Spring只定义接口自动代理接口实现类
能够扫描到包 @ComponentScan("org.zxp.esclientrhl") ESCRegistrar类主要实现ImportBeanDefinitionRegistra ...
- Stanford公开课《编译原理》学习笔记(2)递归下降法
目录 一. Parse阶段 CFG Recursive Descent(递归下降遍历) 二. 递归下降遍历 2.1 预备知识 2.2 多行语句的处理思路 2.3 简易的文法定义 2.4 文法产生式的代 ...
- [UWP] 解决FlipView图片放大的诡异bug
想要实现图片的放大缩小可以通过在Image外面套一个ScrollViewer,然后设置ScrollViewer的ZoomMode="Enabled" <FlipView It ...
- ELK 学习笔记之 Logstash之filter配置
Logstash之filter: json filter: input{ stdin{ } } filter{ json{ source => "message" } } o ...
- Sublime Text 3 配置 Phpcs
Phpcs 插件介绍 可以为 Sublime Text 编辑器提供代码格式检测的功能,使用以下工具(全部可选): PHP_CodeSniffer (phpcs) Linter (php -l) PHP ...