学堂 学堂 学堂公众号手机端

史上flask框架最全知识点集合,共4大部分,近60页,MD文档

lewis 6年前 (2019-06-26) 阅读数 12 #技术
史上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/<user_id>')
def user_info(user_id):
    return 'hello %s' % user_id
路由传递的参数默认当做 string 处理,也可以指定参数的类型
# 路由传递参数
@app.route('/user/<int:user_id>')
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:mysql@127.0.0.1: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/dbSQLALCHEMY_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 发布!
版权声明

本文仅代表作者观点,不代表博信信息网立场。

热门