Flask 基础理解
yuyutoo 2024-12-03 05:44 5 浏览 0 评论
web项目简述
最简单的web项目可通过一个 本地的html 文件来渲染页面,并由浏览器来显示 html内容。 比如 test.html , 内容如下。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
</head>
</html>
<body>
<div id="main" style="width: 600px; height: 400px;">
<h1>This is a web page</h1>
</div>
</body>
通过浏览器打开后, 会显示以下内容
最常用的 web 项目包含前端和后端, 前端负责渲染页面 , 后端提供数据。前后端各司其责产生了很多的前后端技术框架, 其中 Flask 为 Python web 框架, 依托Python技术为支撑, 包括了整个的前后端技术总体。
Flask 中关键技术
- Template
中文名为模板, Template 是一个 html 文件, 其中包含了一些静态数据, 以及用于显示动态数据的占位符。 当前端请求到来时,可通过 render_template() 函数将该模板渲染为 html 码流, 并返回浏览器继而在用户的浏览器中进行显示。
- Static Files
中文名为静态文件, 包含一些样式表配置 .css 文件,以及图片资源, 或引用的本地的 js 前端技术框架。
- Blueprints
中文名为蓝图, 其作用可以很好的组织代码结构, 按模块对代码进行分组管. 每个蓝图分布在一个独立的模块里.
工程布局图
且文档中对该布局图的说明如下。
- flaskr/, a Python package containing your application code and files.
- tests/, a directory containing test modules.
- .venv/, a Python virtual environment where Flask and other dependencies are installed.
- Any other project files you might add in the future.
上面提供的说明,工程名叫 flask-tutorial, 它包含如下内容:
- 主应用目录 flaskr,是一个 python package,包括所有的应用代码和文件;
- 测试案例目录 tests, 对设有涉及到的函数接口进行单元测试;
- 虚拟环境 .venv;
- 工程所需的其他附加文件。
模块说明
tutorial 案例中要求得本工程具备以下模块:
- db 数据库模块, 用于访问 sqlite3 数据库;
- auth 鉴权模块, 用于对用户信息进行鉴权;
- blog 博客模块, 用于展示博客信息;
- static 和 template 在创建主应用包时, 会自动生成的。
由于还要对存在的各模块数据进行测试, 从而产生了 tests 单元测试代码集, 是独立与 flaskr 工程存在的。
通过些描述, 就不难理解整个目录结构就此明确出来了, 相应的目录(包), 可通过在 exploer 中添加, 或 pycharm 中添加。
工程中包的组织
Flask 主应用只能有一个主包, 其他的按工程项目要求, 可按如下来分。对于小型的项目, 一个主包就够用了, 其他的按照模块, 分布在相应的 模块名.py 中即可;对于大型项目, 可将每个模块分成包, 里面又有各自的 templates 和 static , 以及相应的 .py 业务逻辑接口。
整个业务的连通过程
结合,这个业务流程, 再对 flask tutorial 的代码进行查看, 发现不会再凌乱。 也制导作者想表达的工程化意图。
建立 Hello 工程
学习任何一门新的框架时, 最好的方式是自行编写最简单的 Hello 工程, 以了解开发环境,部署环境, 以及最终运行测试后, 是否达到预期要求。
以我的开发环境为例如下所示。
Python: python3.8
PythonModules: Flask, 可通过 pip install Flask 命令进行安装
IDE: PyCharm 2020.3.5
- 启动 PyCharm 应用, 弹出如下界面, 如下图所示.
- 点击 New Project 弹出界面, 选择 左边 Flask 工程, 并指定 Location 生成的位置 ,如下图所示.
- 点击 Create 后, 生成 flask_helloworld 工程如下所示.
- 点击运行按钮, 启动应用并在控制台中能看到应用已经的日志, 并告知了访问地址. 如下图所示.
- 通过提供的服务地址进行访问, 看能否有输出,结合 app.py 中的代码可以看到是否输出一致
建立 flask-tutorial BluePrint 工程
BluePrint 即蓝图, 它的作用是为了更清晰的模块化分工, 举个例子: 用户注册、用户登进、用户登出 这些操作都是和用户鉴权相关; 创建博客文档、更新博客文档,以及删除博客文档等这些,是和博客文档相关。 那么我们按照模块化分工, 可将其分为 用户鉴权蓝图(模块)、博客蓝图(模块)两大类。 另外, 我们需要提供数据存储功能的数据库模块。
通过上述描述可知, flaskr 系统至少存在三大模块, 用图例说明如下。
- 启动 PyCharm 应用, 弹出如下界面, 如下图所示.
- 点击 New Project 弹出界面, 选择 左边 Flask 工程, 并指定 Location 生成的位置 ,如下图所示.
- 点击 Create 后, 生成 flask_tutorial 工程如下所示.
- flask_tutorial 工程目录上,右键执行 New ----> Python Package 创建包,输入包名 flaskr, 创建成功后的截图如下所示。
通过以上步骤,生成了flaskr 主包名, 其主应用为 __init__.py。
- flaskr 目录上,右键执行 New------> Python File 分别创建 auth.py、blog.py、db.py , 创建成功后如下所示。
通过以上步骤,生成了auth 蓝图、blog 蓝图 , 以及数据库模块。 但并没有内容,下一步考虑如何将这些衔接起来。
- 实现上述涉及到的模块代码
__init__.py 中的代码如下所示。
import os
from flask import Flask
from . import db
from . import auth
from . import blog
def create_app(test_config=None):
# create and configure the app
app = Flask(__name__, instance_relative_config=True)
if test_config is None:
# load the instance config, if it exists, when not testing
app.config.from_pyfile('config.py', silent=True)
else:
# load the test config if passed in
app.config.from_mapping(test_config)
# ensure the instance folder exists
try:
os.makedirs(app.instance_path)
except OSError:
pass
# 对蓝图进行注册
app.register_blueprint(auth.auth_bp)
app.register_blueprint(blog.blog_bp)
app.add_url_rule('/', endpoint='index')
# a simple page that says hello
@app.route('/hello')
def hello():
return 'Hello, World!'
return app
auth.py 中的代码如下所示。
from flask import Blueprint, render_template
auth_bp = Blueprint('auth', __name__, url_prefix='/auth')
@auth_bp.route('/register', methods=('GET', 'POST'))
def register():
return render_template('auth/register.html')
blog.py 中的代码如下所示。
from flask import Blueprint, render_template
blog_bp = Blueprint('blog', __name__)
@blog_bp.route('/create', methods=('GET', 'POST'))
def create():
return render_template('blog/create.html')
- 配置运行目标, 如下截图所示
- 运行目标, 并在浏览器中输入 127.0.0.1:5000/auth/register 显示截图如下所示。
说明蓝图已可以成功访问。
相关事项说明
本文不提供 flask-tutorial 的全部工程下载链接, 请到 flask 官网自行下载, 仅借官网全部工程, 自我简化出主要代码骨架,帮助大家理解整个工程是怎么搭建起来的。 由于在写的过程中, 由于不小心疏忽,可能会存在一些问题, 欢迎大家批评指正。
- 上一篇:新手必备!超详细Flask入门基础教程
- 下一篇:第三课:安装 Flask
相关推荐
- TCP协议原理,有这一篇就够了
-
先亮出这篇文章的思维导图:TCP作为传输层的协议,是一个软件工程师素养的体现,也是面试中经常被问到的知识点。在此,我将TCP核心的一些问题梳理了一下,希望能帮到各位。001.能不能说一说TC...
- Win10专业版无线网络老是掉线的问题
-
有一位电脑基地的用户,使用...
- 学习计算机网络需要掌握以下几方面基础知识
-
计算机基础知识操作系统:了解常见操作系统(如Windows、Linux)的基本操作和网络配置,例如如何设置IP地址、子网掩码、网关和DNS服务器等,以及如何通过命令行工具(如ping、tr...
- 网络工程师的圣经!世界级网工手绘268张图让TCP/IP直接通俗易懂
-
要把知识通俗地讲明白,真的不容易。——读者说TCP/IP从字面意义上讲,有人可能会认为TCP/IP是指TCP和IP两种协议。实际生活当中有时候也确实就是这两种协议。然而在很多情况下,它只是...
- 三分钟了解通信知识TCP与IP协议(含“通信技术”资料分享)
-
TCP/IPTCP/IP分层模型①应用层...
- 网闸与防火墙:网络安全设备的差异与应用
-
在网络安全领域,网闸(安全隔离网闸,GAP)和防火墙(Firewall)是两类重要的防护设备。尽管它们都服务于网络安全防护,但在设计理念、技术原理、安全效能及适用场景等方面存在显著差异,以下从五个维度...
- S7-300的TCP/IP通信
-
一、首先在项目中创建2个S7-300的站点;二、硬件组态中,设置合适的TCP/IP地址,在同一网段内;...
- 西门子S7-1500 PLC的 MODBUS TCP通信
-
MODBUSTCP使MODBUS_RTU协议运行于以太网,MODBUSTCP使用TCP/IP和以太网在站点间传送MODBUS报文,MODBUSTCP结合了以太网物理网络和网络标准TC...
- 系统规划与管理师新版备考必备:第7章考点思维导图解析
-
备考系统规划与管理师的小伙伴们,福利又来啦!今天为大家带来《系统规划与管理师(第2版)》第7章考点的思维导图,助你高效梳理重点,让备考更有方向!...
- TCP/IP、Http、Socket 有何区别与联系?
-
HTTP协议对应于应用层,Socket则是对TCP/IP协议的封装和应用(程序员层面上)。HTTP是应用层协议,主要解决如何包装数据。而我们平时说的最多的Socket是什么呢?实际上...
- 西门子PLC串口协议与以太网通信协议对比
-
西门子plc品牌众多,通信协议的类型就更多了,具体可分为串口协议和以太网通信协议两大类。...
- 网络编程懒人入门(十三):一泡尿的时间,快速搞懂TCP和UDP的区别
-
本文引用了作者Fundebug的“一文搞懂TCP与UDP的区别”一文的内容,感谢无私分享。1、引言...
- 程序员必备的学习笔记《TCP/IP详解(一)》
-
为什么会有TCP/IP协议在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别。就好像圣经中上帝打乱了各地人的口音,让他们无法合作一样...
- 一文读懂TCP/IP协议工作原理和工作流程
-
简述本文主要介绍TCP/IP协议工作原理和工作流程。含义TCP/IP协议,英文全称TransmissionControlProtocol/InternetProtocol,包含了一系列构成互联网...
- 如何在 Windows 10 和 Windows 11 上重置 TCP/IP 堆栈
-
传输控制协议/Internet协议,通常称为TCP/IP,是您的WindowsPC如何与Internet上的其他设备进行通信的关键部分。但是当事情出错时会发生什么?你如何解决它?幸运的...
你 发表评论:
欢迎- 一周热门
-
-
前端面试:iframe 的优缺点? iframe有那些缺点
-
带斜线的表头制作好了,如何填充内容?这几种方法你更喜欢哪个?
-
漫学笔记之PHP.ini常用的配置信息
-
其实模版网站在开发工作中很重要,推荐几个参考站给大家
-
推荐7个模板代码和其他游戏源码下载的网址
-
[干货] JAVA - JVM - 2 内存两分 [干货]+java+-+jvm+-+2+内存两分吗
-
正在学习使用python搭建自动化测试框架?这个系统包你可能会用到
-
织梦(Dedecms)建站教程 织梦建站详细步骤
-
【开源分享】2024PHP在线客服系统源码(搭建教程+终身使用)
-
2024PHP在线客服系统源码+完全开源 带详细搭建教程
-
- 最近发表
- 标签列表
-
- mybatis plus (70)
- scheduledtask (71)
- css滚动条 (60)
- java学生成绩管理系统 (59)
- 结构体数组 (69)
- databasemetadata (64)
- javastatic (68)
- jsp实用教程 (53)
- fontawesome (57)
- widget开发 (57)
- vb net教程 (62)
- hibernate 教程 (63)
- case语句 (57)
- svn连接 (74)
- directoryindex (69)
- session timeout (58)
- textbox换行 (67)
- extension_dir (64)
- linearlayout (58)
- vba高级教程 (75)
- iframe用法 (58)
- sqlparameter (59)
- trim函数 (59)
- flex布局 (63)
- contextloaderlistener (56)