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 ...
随机推荐
- WebGL简易教程(六):第一个三维示例(使用模型视图投影变换)
目录 1. 概述 2. 示例:绘制多个三角形 2.1. Triangle_MVPMatrix.html 2.2. Triangle_MVPMatrix.js 2.2.1. 数据加入Z值 2.2.2. ...
- MVC4 Jqgrid设计与实现
项目本来使用的是webgrid.后台弃用改成Jqgrid插件. 首先介绍一下webgrid的用法:webgrid是mvc中HtmlHelper自带的.首先创建viewmodel用于数据的绑定,然后在页 ...
- HDU 1159——Common Subsequence(DP)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=1159 题解 #include<iostream> #include<cstring> ...
- CSS定位与布局
我们在编写网页代码时,首先应该做的就是设计好页面的布局形式,然后再往里面填充内容.网页布局的好与坏,直接决定了网页最终的展示效果.PC端常见的网页布局形式有两列布局.三列布局等.在CSS中,我们通常使 ...
- BeetleX服务网关之限流和缓存
限流和缓存相关是网关中两个非常重要的功能,前者是保障服务更可靠地运行,后者则可以大大提高应用的吞吐能力.Beetlex.Bumblebee微服务网关提供了两个扩展插件来实现这两个功能,分别是Beetl ...
- mac下安装rabbitmq
使用homebrew安装rabbitmq,命令如下: brew install rabbitmq 安装的位置如下/usr/local/Cellar/rabbitmq/3.7.18 进入到sbin目录下 ...
- CRS-2674: Start of 'ora.cssd' on 'rac2' failed 引发的rac集群服务起不来问题
问题背景:客户反馈Oracle rac集群节点宕机 1.首先查看宕机原因,归档日志满导致服务重启,查看归档日志路径是USE_DB_RECOVERY_FILE_DEST (默认路径), 安装的时候没有做 ...
- CS184.1X 计算机图形学导论 作业0
1.框架下载 在网站上下载了VS2012版本的作业0的框架,由于我的电脑上的VS是2017版的,根据提示安装好C++的版本,并框架的解决方案 重定解决方案目标为2017版本. 点击运行,可以出来界面. ...
- [WPF自定义控件库] 模仿UWP的ProgressRing
1. 为什么需要ProgressRing 虽然我认为这个控件库的控件需要模仿Aero2的外观,但总有例外,其中一个就是ProgressRing.ProgressRing是来自UWP的控件,部分代码参考 ...
- Spring Security 入门 (二)
我们在篇(一)中已经谈到了默认的登录页面以及默认的登录账号和密码. 在这一篇中我们将自己定义登录页面及账号密码. 我们先从简单的开始吧:设置自定义的账号和密码(并非从数据库读取),虽然意义不大. 上一 ...