黑马程序员技术交流社区

标题: Flask框架学习总结 [打印本页]

作者: 擂小鼓    时间: 2018-7-19 20:11
标题: Flask框架学习总结
别人都说flask不难,其实现在我也这么觉得,但是在刚接触的时候还是有点吃力的。

在学习的过程中查阅了不少,也了解了许多,今天想做个总结。。。以免觉得学了那么久什么都没学到,还有防止以后忘记。



Flask的特点

轻量、简洁、扩展性强

常用的扩展包:wtf、sqlalchemy、login、script、migrate、mail

创建虚拟环境:mkvirtualenv 创建虚拟环境,workon 进入虚拟环境,deactivate退出虚拟环境

删除虚拟环境:rmvirtualenv

安装依赖包:pip  install -r requirements.txt

生成依赖包:pip freeze > requirements.txt



视图

Flask基本程序的实现:

1、创建应用程序实例,参数__name__的主要作用是为了确定程序所在目录

2、装饰器路由的定义和使用,可以指定请求方法

动态路由参数:语法格式:<args>

正则URL:werkzeug的routing模块实现路由访问,优化访问、限制访问

重定向:当项目文件或目录发生改变的时候,建议使用url_for()

redirect()和url_for()

redirect()接收的参数,是具体的URL

url_for()接收的视图函数名



状态码:return 'string',自定义的状态码

自定义状态码,实现前后端的数据交互,不遵循HTTP协议定义的状态码

abort函数抛出的状态码必须符合HTTP协议

errorhandler()会接收abort函数抛出的状态码,一般用来处理错误页面



状态保持:HTTP协议的无状态,cookie和session的具体描述

make_response()返回的对象可以实现cookie的设置和获取



请求上下文:request和session


request的主要作用:获取客户端和服务器交互过程中参数信息,form/data/files/args/get_json/headers

session:保存客户端和服务器交互过程中的用户信息



应用上下文:current_app和g

current_app会和程序运行一起存在,可以用来记录日志信息


g变量用来临时存储用户信息



请求钩子:会在每次客户端和服务器交互前或以后执行

after_request:在每次请求后执行,用来实现前后端数据交互格式



装饰器路由的实现:

Rule(构造具体的URL)

Map(保存不同的和URL和视图函数的映射)

MapAdapter(实现具体的URL和视图函数的绑定关系)

Flask_scripte:扩展命令行,以python 文件名.py runserver的形式启动程序

自定义IP和端口,和migrate配合实现数据库迁移



模板

模板的就是文件,渲染视图函数返回的响应数据

变量 {{ 变量 }}

语句

{% if  表达式 %}

{% endif  %}



过滤器:格式化输出数据

{{ 数据 | 过滤器名称}}

过滤器可以自定义



表单WTF:Flask_wt扩展,实现表单数据的验证

密码比较、数据是否存在、验证邮箱、验证字符串长度

使用表单验证器,必须设置secret_key,验证器要验证数据,必须在表单中添加表单对象.csrf_token()



宏、继承、包含:

micro:相当于python中的函数,一般用来实现模板页面的动态功能

extends:相当于代码替换,一般用来实现页面中固定不变的部分,比如顶部菜单等

include:真正实现页面的复用,一般用来实现重复页面的功能

继承的使用注意事项:

模板不支持多继承,继承的语句结束要指定结束的语句块标记



Flask中的特殊变量和方法:在视图和模板中都可以使用

request、url_for()、config、flash消息闪现

数据库



Flask_sqlalchemy实现ORM抽象,不用面对具体的SQL语句

实现数据库的连接:

app.config['SQLALCHEMY_DATABASE_URI']='mysql://root:mysql@localhost/dbs'

app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True追踪数据库的修改行为,如未设置不会报错,会同时警告信息

创建数据库实例:db = SQLALchemy()



定义模型类:

需要继承自db.Model

定义字段需要使用db.Column()方法

backref反向引用实现一对多或多对一的查询

基本的查询语句:

get接收id值

filter_by(id=user_id).first()使用精确查询,需要加上查询执行器

filter模糊查询,order_by排序

paginate分页操作

in_/notin_/and/

数据库迁移:Flask_migrate

python 文件名.py db init  创建迁移文件

python 文件名.py db migrate 创建迁移脚本

python 文件名.py db ungrade 更新数据表

python 文件名.py db downgrade 回退数据表

回退数据库前建议使用history命令查看历史版本号

Flask_mail:发送邮件

邮件服务器、端口、传输协议、邮箱名、授权码



蓝图、测试、部署

蓝图:模块化应用,主要用来实现不同文件中的视图函数和路由之间的绑定

创建蓝图对象:api = Blueprint('api',__name__),第一个api是蓝图对象,第二个api是蓝图名称;

使用蓝图路由

注册蓝图路由到应用程序实例上



测试:验证预期结果和实际结果之间的差距

单元测试:具体功能模块的测试,单元测试的本质是assert断言代码

实现单元测试,需要继承自unittest.casttest

单元测试代码中,测试类,必须定义两个方法:

setUP()实现测试前的准备工作,比如数据库连接,创建程序实例、模拟客户端等

tearDown()实现测试后的扫尾工作,比如清楚会话对象、删除测试数据等

测试代码必须以test开头

部署:gunicorn -w 开启的进程数 -b 绑定的IP和PORT 启动文件:应用程序实例名称




作者: wuqiong    时间: 2018-7-20 18:01

作者: 398777640    时间: 2018-7-21 15:38

作者: 摩西摩西OvO    时间: 2018-7-23 10:36

作者: 不二晨    时间: 2018-7-23 13:39
优秀,加油加油!
作者: 吴琼老师    时间: 2018-7-26 15:20

作者: 摩西摩西OvO    时间: 2018-7-26 17:41





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2