一、搭建Flask环境
pip 是用来安装Python包的工具,一般在python安装完成时,会自动完成安装。
可以通过命令:pip --version 查看。
我使用的是python 3.9.12
虚拟环境搭建以及相关设置详见python虚拟环境
-
在终端中,执行以下命令,创建一个Flask专用的虚拟环境
python -m venv flask_venv
-
在终端中,执行以下命令,进入虚拟环境
& D:\python_Code\FlaskWeb\flask_venv\Scripts\Activate.ps1
-
在终端中,执行以下命令,安装Flask相关的包
pip install flask
-
在终端中,执行以下命令,查看安装结果
pip list
安装前:
安装后:click: 是一个命令行应用的框架。用于提供 flask 命令,并允许添加自定义管理命令。 colorama: 模块可以跨多终端,显示字体不同的颜色和背景。 importlib-metadata: 可以读取第三方包的元数据。 itsdangerous: 保证数据完整性的安全标志数据,用于保护 Flask 的 session cookie。 Jinja2: 是Python的一个流行的模板引擎。Web模板系统将模板与特定数据源组合以呈现动态网页。 MarkupSafe: 与 Jinja 共用,在渲染页面时用于避免不可信的输入,防止注入攻击。 WerKzeug: 作为一个Web框架的底层库,提供了很多封装好的类、API,可以帮助我们快速实现一些web开发所需要的功能. zipp: 在任何Python中使用zipp.Path代替zipfile.Path。一个兼容pathlib的Zipfile对象包装器。是标准库Path对象的官方后端移植。
二、了解Flask
强烈推荐:Flask中文文档
Flask是基于Werkzeug(WSGI工具包)和Jinja2(模板引擎)的web应用框架
Flask 可能是“微小”的,但它已经为满足您的各种生产需要做出了 充足的准备。
Flask 的理念是为所有应用建立一个良好的基础,其余的一切都取决于你自己或者扩 展。
- Flask永远不会包含数据库层,也不会有表单库或是这个方面的其它东西。Flask本身只是Werkezug和Jinja2的之间的桥梁,前者实现一个合适的WSGI应用,后者处理模板。
- 为什么呢?因为人们有不同的偏好和需求, Flask不可能把所有的需求都囊括在核心里。大多数 web 应用会需要一个模板引擎。然而不是每个应用都需要一个SQL数据库的。
Flask是一个非常小的python-web框架,被称为微型框架,使用Python语言编写,较其他同类型框架更为灵活、轻便、安全且容易上手。
Flask是一个轻量级的可定制框架,即只提供一个强健的核心,其他功能通过扩展(插件库)来实现,你可以根据项目的需求进行量身打造。
Flask框架有自带的开发服务器,所以在开发环境下可以不需要额外装载服务器,但该服务器不建议在生产环境下使用。
-
Flask属于轻量级,代码方便,但想使用大部分功能的时候会需要安装大量的插件。
-
在使用Flask过程中,主要是用到了三个框架,通俗意义上来说,Flask = Werkzeug + JInja2 +SQLAlchemy
Werkzegu负责前后端的通信等 JInja2是模板引擎,负责路由跳转和模板编写等 SQLAlchemy负责是数据库使用等
1、Flask项目目录结构
- 以下项目结构
仅供参考查阅使用
,开发过程中并不需要死板地搭建如此复杂的目录结构。
完全可以根据自己的习惯以及项目的实际需求,对其进行适当的简化或者剪裁。
按照 功能结构
组织: 模板在一个文件夹中,静态文件在另外一个文件夹中,视图在第三个文件夹中。
|ProjectName
|-app/ #程序包
| |-__init__.py #flask实例工厂
| |-manage.py #基于flask-scrip的命令行脚本,用于辅助管理项目
| |-static/ #存放css、js、图片等静态文件
| |-templates/ #存放模板
| | |-base.html #母版页
| | |-main/
| | | |-index.html #主页/首页
| | |-OtherModules/ #其他业务模块模板
| |-views/ #视图
| | |-__init__.py
| | |-main.py #主模块视图
| | |-OtherModules.py #其他业务模块视图
| |-errors.py #异常
| |-models.py #数据模型
| |-forms.py #表单
| |-extensions.py #组织扩展,辅助引入第三方扩展库
|-config.py #全局配置文件
|-venv/ #虚拟环境
|-tests/ #项目测试
|-readme.txt #用于存储环境信息(所安装的库的版本信息),可通过pip freeze > readme.txt命令生成
|-migratios/ #数据库迁移文件,可利用第三方库进行生成并管理此文件目录
|-README.md #项目说明文档
按照分区
组织: 同一个功能的模板,静态文件,视图都在一个文件夹内。
|ProjectName
|-app/ #程序包
| |-__init__.py #flask实例工厂
| |-manage.py #基于flask-scrip的命令行脚本,用于辅助管理项目
| |-main/ #主模块
| | |-static/ #存放css、js、图片等静态文件
| | |-templates/ #存放模板
| | | |-index.html #主页/首页
| | |-views/ #视图
| | |-errors.py #异常
| | |-models.py #数据模型
| | |-forms.py #表单
| |-OtherModules/ #其他业务模块,参考主模块目录
| |-extensions.py #组织扩展,辅助引入第三方扩展库
|-config.py #全局配置文件
|-venv/ #虚拟环境
|-tests/ #项目测试
|-readme.txt #用于存储环境信息(所安装的库的版本信息),可通过pip freeze > readme.txt命令生成
|-migratios/ #数据库迁移文件,可利用第三方库进行生成并管理此文件目录
|-README.md #项目说明文档
两种组织方式的优劣并无定论,选择自己喜欢的就好
对于一个web项目,往往我们会遵循 mvc
- model:模型,当用户在页面上点击了一个按钮,控制器通过模型将数据存入对应的数据库
- view:视图,展示的页面
- controller:控制器,如果用户点击了视图中的按钮,那么就相当于触发了一个事件,就会通过控制器,系统就需要决定把这个事件交给谁去处理
对于Python的项目,我们会遵循 mtv
- model:模型,当用户在页面上点击了一个按钮,控制器通过模型将数据存入对应的数据库
- template :模板,比如网页,html
- view:视图,类似于web的控制器,起控制作用,里面写的就是我们的python代码
2、Flask常用扩展包
Flask-SQLAlchemy: 封装了SQLAlchemy,提供ORM
Flask-Migrate: 处理SQLAlchemy数据库的迁移(migrations)
flask-wtf: 封装了WTForms,提供表单功能
flask-script: 支持在Flask里编写额外的脚本
Flask-Login: 提供账号session管理
flask-bootstrap: 封装了Bootstrap框架
flask-sijax: 帮助开发者将Ajax引入到应用程序
三、使用Flask
1、主要知识点
HTML转义
路由
变量规则
唯一的URL/重定向行为
URL构建
HTTP方法
静态文件
渲染模板
操作请求数据
本地环境
请求对象
文件上传
Cookies
重定向和错误
关于响应
JSON 格式的 API
会话
消息闪现
日志
集成WSGI中间件
使用Flask扩展
部署到网络服务器
2、动手尝试
不管项目大小,应当养成使用版本控制(如Git)的习惯
1)项目简介
该示例项目为具备基本功能的博客应用。(数据库用的是自带的sqlite3)
未登录的首页 | 登录后的首页 |
---|---|
![]() | ![]() |
- 用户可以注册、登录和注销账户。
注册 | 登录 |
---|---|
![]() | ![]() |
- 用户无需登录账户即可浏览帖子。
- 用户在登录账户后,才可以发贴、编辑或者删除自己的帖子。
发帖 | 编辑 |
---|---|
![]() | ![]() |
2)项目源码
flask官方示例教程源码——GitHub(GitHub有时网络不好进不去,多试几次就行了)