A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

擂小鼓

初级黑马

  • 黑马币:

  • 帖子:

  • 精华:

© 擂小鼓 初级黑马   /  2018-7-19 20:11  /  2807 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

别人都说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 启动文件:应用程序实例名称



6 个回复

倒序浏览
回复 使用道具 举报
回复 使用道具 举报
回复 使用道具 举报
优秀,加油加油!
回复 使用道具 举报
回复 使用道具 举报
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马