在工作中,我们不可能将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:对项目文件进行拆分的更多相关文章

  1. 阿里云部署 Flask + WSGI + Nginx 详解

    抵不住朋友的诱惑,今天终于入手了一台阿里云服务器,是Ubuntu 1.4 32位版本,最初考虑是用来尝尝鲜只是买了个最低配的,价格算起来与在国外买个空间的价格相当吧(可能一年才贵100多),但用起来感 ...

  2. 标准的Flask启动文件

    最近有一些同学问了我一些项目结构的问题 所以今天给大家专门讲解 解耦后的项目 目录我会分为两种方式:一种是普通解耦 一种是多mvc解耦 首先 我没先建立我们程序的文件夹并且在这个文件夹内写一个和这个文 ...

  3. 阿里云部署 Flask + uWSGI + Nginx

    一.引言 今天入手了一台阿里云服务器,是centeros 7.5版本.本文解决的是 Flask 的部署问题.假设你的Flask的应用已经完成,现在只是部署的问题,本文以部署我的二次开发微信订阅号的项目 ...

  4. 阿里云部署 Flask + WSGI + Nginx 转载详解

    我采用的部署方案是: Web 服务器采用 uwsgi host Flask 用 Supervisor 引用 uwsgi 作常规启动服务 基于 Nginx 作反向代理 首先, 阿里云服务器可以通过 SS ...

  5. 编写一个简单的flask的前后端交互的网页(flask简单知识的讲解)

    实验原理: 1.什么是flask Flask是一个使用Python编写的轻量级Web应用框架,其WSGI工具采用Werkzeng,模板引擎使用Jinja2.Flask与 Django之间的区别就是Dj ...

  6. flask 之(五) --- 对象|钩子|拆分

    内置对象 request: 请求的所有信息 session   服务端会话技术的接口 config:    当前项目的配置信息,模板中可以直接使用 g:global 在单次请求过程中,实现全局数据共享 ...

  7. Flask整合WebLoader 用于大附件拆分上传再合并

    博客:https://blog.csdn.net/jinixin/article/details/77545140 github:https://github.com/jinixin/upload-d ...

  8. Flask 中蓝图的两种表现形式

    最近在学Flask,特有的@X.route 很适合RESTfuld API, 一般小型应用,在一个py文件中就可以完成,但是维护起来比较麻烦. 想体验Django那样的MVT模式, 看到 Flask提 ...

  9. Flask项目之手机端租房网站的实战开发(二)

    说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 接着上一篇博客继续往下写 :https://blog.csdn.net/qq_41782425/article/details/8 ...

随机推荐

  1. java基础之循环遍历List和Map

    List和Map是在编程中使用的最频繁的集合类型了,每天都不知道要见它们多少面.在这里介绍下这两种类型的循环遍历,以供学习参考和使用. 一.List 遍历List一般有三种方法,如下: List< ...

  2. python爬虫——爬取B站用户在线人数

    国庆期间想要统计一下bilibili网站的在线人数变化,写了一个简单的爬虫程序.主要是对https://api.bilibili.com/x/web-interface/online返回的参数进行分析 ...

  3. spring源码分析系列4:ApplicationContext研究

    ApplicationContext接口 首先看一下一个最基本的上下文应该是什么样子 ApplicationContext接口的注释里写的很清楚: 一个基本applicationContext应该提供 ...

  4. Python开发专属壁纸下载与轮换程序

    本人对于壁纸一直偏佛系,不爱特意去找一堆壁纸.因此用Python简单地搞了一个自动下载壁纸,定时随机轮换的功能来自娱自乐,顺便分享给大家. 原文链接:https://www.codernice.top ...

  5. 从零开始的vue学习笔记(八)

    前言 今天花一天时间阅读完Vue Router的官方文档的基础部分,简单的做一下总结和记录 Vue Router是什么 Vue Router 是 Vue.js 官方的路由管理器,用于构建单页应用(SP ...

  6. 文本分类(TFIDF/朴素贝叶斯分类器/TextRNN/TextCNN/TextRCNN/FastText/HAN)

    目录 简介 TFIDF 朴素贝叶斯分类器 贝叶斯公式 贝叶斯决策论的理解 极大似然估计 朴素贝叶斯分类器 TextRNN TextCNN TextRCNN FastText HAN Highway N ...

  7. SSL证书自签名使用及监控

    前言 证书简介 信息安全越来越受重视,HTTPS已经相当普及,要让我们的HTTP接口支持HTPPS,只需要一个SSL证书就可以啦 全称公钥证书(Public-Key Certificate, PKC) ...

  8. Python小游戏——猜数字教程(random库教程)

    今天来开发一个简单的数字逻辑游戏,猜数字(数字炸弹) 首先开发游戏第一件事,了解需求. 猜数字游戏规则: 计算机随机生成一个指定范围的数字,由玩家来猜测, 之后计算机会根据玩家提供数字来与自己生成的数 ...

  9. Comparable和Comparator 是什么以及区别

    一.Comparable和Comparator Comparable可以认为是一个内比较器,实现了Comparable接口的类,类的实例与实例直接可以比较,依赖compareTo方法的实现,compa ...

  10. unittest中HTMLTestRunner模块生成

    unittest里面是不能生成html格式报告的,需要导入一个第三方的模块:HTMLTestRunner 一.导入HTMLTestRunner 方法1.这个模块下载不能通过pip安装了,只能下载后手动 ...