Flask 基础理解
yuyutoo 2024-12-03 05:44 7 浏览 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
相关推荐
- 墨尔本一华裔男子与亚裔男子分别失踪数日 警方寻人
-
中新网5月15日电据澳洲新快网报道,据澳大利亚维州警察局网站消息,22岁的华裔男子邓跃(Yue‘Peter’Deng,音译)失踪已6天,维州警方于当地时间13日发布寻人通告,寻求公众协助寻找邓跃。华...
- 网络交友须谨慎!美国犹他州一男子因涉嫌杀害女网友被捕
-
伊森·洪克斯克(图源网络,侵删)据美国广播公司(ABC)25日报道,美国犹他州一名男子于24日因涉嫌谋杀被捕。警方表示,这名男子主动告知警局,称其杀害了一名在网络交友软件上认识的25岁女子。雷顿警...
- 一课译词:来龙去脉(来龙去脉 的意思解释)
-
Mountainranges[Photo/SIPA]“来龙去脉”,汉语成语,本指山脉的走势和去向,现比喻一件事的前因后果(causeandeffectofanevent),可以翻译为“i...
- 高考重要考点:range(range高考用法)
-
range可以用作动词,也可以用作名词,含义特别多,在阅读理解中出现的频率很高,还经常作为完形填空的选项,而且在作文中使用是非常好的高级词汇。...
- C++20 Ranges:现代范围操作(现代c++白皮书)
-
1.引言:C++20Ranges库简介C++20引入的Ranges库是C++标准库的重要更新,旨在提供更现代化、表达力更强的方式来处理数据序列(范围,range)。Ranges库基于...
- 学习VBA,报表做到飞 第二章 数组 2.4 Filter函数
-
第二章数组2.4Filter函数Filter函数功能与autofilter函数类似,它对一个一维数组进行筛选,返回一个从0开始的数组。...
- VBA学习笔记:数组:数组相关函数—Split,Join
-
Split拆分字符串函数,语法Split(expression,字符,Limit,compare),第1参数为必写,后面3个参数都是可选项。Expression为需要拆分的数据,“字符”就是以哪个字...
- VBA如何自定义序列,学会这些方法,让你工作更轻松
-
No.1在Excel中,自定义序列是一种快速填表机制,如何有效地利用这个方法,可以大大增加工作效率。通常在操作工作表的时候,可能会输入一些很有序的序列,如果一一录入就显得十分笨拙。Excel给出了一种...
- Excel VBA入门教程1.3 数组基础(vba数组详解)
-
1.3数组使用数组和对象时,也要声明,这里说下数组的声明:'确定范围的数组,可以存储b-a+1个数,a、b为整数Dim数组名称(aTob)As数据类型Dimarr...
- 远程网络调试工具百宝箱-MobaXterm
-
MobaXterm是一个功能强大的远程网络工具百宝箱,它将所有重要的远程网络工具(SSH、Telnet、X11、RDP、VNC、FTP、MOSH、Serial等)和Unix命令(bash、ls、cat...
- AREX:携程新一代自动化回归测试工具的设计与实现
-
一、背景随着携程机票BU业务规模的不断提高,业务系统日趋复杂,各种问题和挑战也随之而来。对于研发测试团队,面临着各种效能困境,包括业务复杂度高、数据构造工作量大、回归测试全量回归、沟通成本高、测试用例...
- Windows、Android、IOS、Web自动化工具选择策略
-
Windows平台中应用UI自动化测试解决方案AutoIT是开源工具,该工具识别windows的标准控件效果不错,但是当它遇到应用中非标准控件定义的UI元素时往往就无能为力了,这个时候选择silkte...
- python自动化工具:pywinauto(python快速上手 自动化)
-
简介Pywinauto是完全由Python构建的一个模块,可以用于自动化Windows上的GUI应用程序。同时,它支持鼠标、键盘操作,在元素控件树较复杂的界面,可以辅助我们完成自动化操作。我在...
- 时下最火的 Airtest 如何测试手机 APP?
-
引言Airtest是网易出品的一款基于图像识别的自动化测试工具,主要应用在手机APP和游戏的测试。一旦使用了这个工具进行APP的自动化,你就会发现自动化测试原来是如此简单!!连接手机要进行...
- 【推荐】7个最强Appium替代工具,移动App自动化测试必备!
-
在移动应用开发日益火爆的今天,自动化测试成为了确保应用质量和用户体验的关键环节。Appium作为一款广泛应用的移动应用自动化测试工具,为测试人员所熟知。然而,在不同的测试场景和需求下,还有许多其他优...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- 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)