史上flask框架最全知识点集合,共4大部分,近60页,MD文档
学些了Flask这么久,收集了好多好多的学习资料,然后整理成md文档准备随时使用,实在是太爽了。
学习笔记共4大部分,近60页,从0到项目一步步手把手教程。
想要的小伙伴直接去这获取:
https://zhuanlan.zhihu.com/p/...
笔记目录:
1 笔记内容
Flask简介
Web应用程序的本质
Web(World Wide Web)诞生最初的目的,是为了利用互联网交流工作文档。
Web框架
什么是Web框架?
- 协助开发者快速开发 Web 应用程序的一套功能代码
- 开发者只需要按照框架约定要求,在指定位置写上自己的业务逻辑代码
例如:在某个区需要成立一家医院,有两种方式:
- 圈地,打地基,盖楼,装修,入驻
- 买楼,装修,入驻
- 为什么要用Web框架?
web网站发展至今,特别是服务器端,涉及到的知识、内容,非常广泛。这对程序员的要求会越来越高。如果采用成熟,稳健的框架,那么一些基础的工作,比如,安全性,数据流控制等都可以让框架来处理,那么程序开发人员可以把精力放在具体的业务逻辑上面。使用框架的优点:
- 稳定性和可扩展性强
- 可以降低开发难度,提高开发效率。
HelloWorld程序
创建 Python 项目
- 打开 Pycharm,创建
Pure Python
类型的项目,创建项目完成之后选择之前创建的py3_flask
作为虚拟环境
第 4 步路径可以通过在指定虚拟环境下,输入 which python
获得
示例:
- 新建文件helloworld.py
- 导入Flask类
from flask import Flask
Flask函数接收一个参数__name__,它会指向程序所在的包
app = Flask(__name__)
- 装饰器的作用是将路由映射到视图函数 index
@app.route('/')
def index():
return 'Hello World'
- Flask应用程序实例的 run 方法 启动 WEB 服务器
if __name__ == '__main__':
app.run()
- 在程序运行过程中,程序实例中会使用
url_map
将装饰器路由和视图的对应关系保存起来,打印结果如下图:
路由基本定义
- 明确路由定义的参数,请求方式指定
- PostMan 的使用
指定路由地址
# 指定访问路径为 demo1
@app.route('/demo1')
def demo1():
return 'demo1'
给路由传参示例
有时我们需要将同一类 URL 映射到同一个视图函数处理,比如:使用同一个视图函数来显示不同用户的个人信息。
# 路由传递参数
@app.route('/user/')
def user_info(user_id):
return 'hello %s' % user_id
- 路由传递的参数默认当做 string 处理,也可以指定参数的类型
# 路由传递参数
@app.route('/user/')
def user_info(user_id):
return 'hello %d' % user_id
这里指定int,尖括号中的内容是动态的,在此暂时可以理解为接受 int 类型的值,实际上 int 代表使用 IntegerConverter 去处理 url 传入的参数
指定请求方式
装饰器路由具体实现梳理
Flask有两大核心:Werkzeug和Jinja2
- Werkzeug实现路由、调试和Web服务器网关接口
- Jinja2实现了模板。
Werkzeug是一个遵循WSGI协议的python函数库
- 其内部实现了很多Web框架底层的东西,比如request和response对象;
- 与WSGI规范的兼容;支持Unicode;
- 支持基本的会话管理和签名Cookie;
- 集成URL请求路由等。
Werkzeug库的 routing 模块负责实现 URL 解析。不同的 URL 对应不同的视图函数,routing模块会对请求信息的URL进行解析,匹配到URL对应的视图函数,执行该函数以此生成一个响应信息。
routing模块内部有:
Rule类
- 用来构造不同的URL模式的对象,路由URL规则
Map类
- 存储所有的URL规则和一些配置参数
BaseConverter的子类
- 负责定义匹配规则
MapAdapter类
- 负责协调Rule做具体的匹配的工作
Flask-SQLAlchemy安装及设置
- SQLALchemy 实际上是对数据库的抽象,让开发者不用直接和 SQL 语句打交道,而是通过 Python 对象来操作数据库,在舍弃一些性能开销的同时,换来的是开发效率的较大提升
- SQLAlchemy是一个关系型数据库框架,它提供了高层的 ORM 和底层的原生数据库的操作。flask-sqlalchemy 是一个简化了 SQLAlchemy 操作的flask扩展。
- 文档地址:http://docs.jinkan.org/docs/f...
安装
- 安装 flask-sqlalchemy
pip install flask-sqlalchemy
- 如果连接的是 mysql 数据库,需要安装 mysqldb
pip install flask-mysqldb
数据库连接设置
- 在 Flask-SQLAlchemy 中,数据库使用URL指定,而且程序使用的数据库必须保存到Flask配置对象的 SQLALCHEMY_DATABASE_URI 键中
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:[email protected]:3306/test'
- 其他设置:
# 动态追踪修改设置,如未设置只会提示警告
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
#查询时会显示原始SQL语句
app.config['SQLALCHEMY_ECHO'] = True
- 配置完成需要去 MySQL 中创建项目所使用的数据库
$ mysql -uroot -pmysql
$ create database test charset utf8;
- 其他配置
名字 | 备注 |
---|---|
SQLALCHEMY_DATABASE_URI | 用于连接的数据库 URI 。例如:sqlite:////tmp/test.dbmysql://username:password@server/db |
SQLALCHEMY_BINDS | 一个映射 binds 到连接 URI 的字典。更多 binds 的信息见用 Binds 操作多个数据库。 |
SQLALCHEMY_ECHO | 如果设置为Ture, SQLAlchemy 会记录所有 发给 stderr 的语句,这对调试有用。(打印sql语句) |
SQLALCHEMY_RECORD_QUERIES | 可以用于显式地禁用或启用查询记录。查询记录 在调试或测试模式自动启用。更多信息见get_debug_queries()。 |
SQLALCHEMY_NATIVE_UNICODE | 可以用于显式禁用原生 unicode 支持。当使用 不合适的指定无编码的数据库默认值时,这对于 一些数据库适配器是必须的(比如 Ubuntu 上 某些版本的 PostgreSQL )。 |
SQLALCHEMY_POOL_SIZE | 数据库连接池的大小。默认是引擎默认值(通常 是 5 ) |
SQLALCHEMY_POOL_TIMEOUT | 设定连接池的连接超时时间。默认是 10 。 |
SQLALCHEMY_POOL_RECYCLE | 多少秒后自动回收连接。这对 MySQL 是必要的, 它默认移除闲置多于 8 小时的连接。注意如果 使用了 MySQL , Flask-SQLALchemy 自动设定 这个 |
上述内容知识从里面摘出一部分,这个笔记在我的博客里面
https://zhuanlan.zhihu.com/p/...
本文由博客一文多发平台 OpenWrite 发布!