flask 配置文件和学习资料
原文:https://www.cnblogs.com/gaoya666/p/9174665.html
方式一:从文件中加载配置
1.创建一个配置文件,如:config.ini,在配置文件中写入你想要配置的信息
2.app.config.from_pyfile(‘config.ini‘)加载配置
config.ini 里面不要节点,直接key=value
注释方法是#,不是;
方式二:
app.config.from_mapping({
'DEBUG'
:
True
})
importlib模块
实现机制:根据字符串的形式导入模块,通过反射找到里面的内容,有一个特点,只有全部大写才能被读到。
导入方式:app.config.from_object()
默认配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
|
修改配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
|
常用:app.config.from_object()
路由系统
本质:带参数的装饰器和闭包实现的。
@app.route('/user/<username>')
@app.route('/post/<int:post_id>')
@app.route('/post/<float:post_id>')
@app.route('/post/<path:path>')
@app.route('/login', methods=['GET', 'POST'])
常用路由系统有以上五种,所有的路由系统都是基于一下对应关系来处理:
1 2 3 4 5 6 7 8 9 |
|
总结:
- app.route()支持三个参数:url、method、endpoint(相当于django中的name);
- endpoint:反向生成url,如果不写,默认为函数名,用url_for 反向生成url
- 动态路由:一定要有视图函数接收。如果显示列表页面,需要传id,就要有一个地方接收。app.route('/post/<int:id>'),如上五种方法。限制参数类型。注意:它只支持这几种类型,不支持正则表达式。
- 如果带参数,如何反向生成:
1 2 3 4 |
|
- 没有参数:url_for('endpoint'),有参数:url_for("index",nid=777)
视图
FBV
请求相关
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
响应
1 2 3 4 5 |
|
注:jsonify内部帮我们序列化,跟django的jsonresponse有点相似。
我们返回的都是响应体,页面可以看到的。那我们如何加响应头?
如果我们想要返回相关的信息时,可以通过make_response将我们的内容封装起来。
1 2 3 4 |
|
那我们可以设置cookie吗?
1 2 3 4 5 6 |
|
模板渲染
1、模板的使用
Flask使用的是Jinja2模板,所以其语法和Django无差别
2、自定义模板方法
Flask中自定义模板方法的方式和Bottle相似,创建一个函数并通过参数的形式传入render_template,如:
HTML
run.py
其他
注意:Markup等价django的mark_safe
模板详细用法
基本数据类型
可以执行python语法,如:dict.get(),list["xx"]
传入函数
Django中函数自动加括号执行;
Flask中不自动执行,需要自己主动执行,可以传参数。
全局定义函数
1 2 3 4 5 6 7 8 9 |
|
模板继承
layout.html
1 2 3 4 5 6 7 8 9 10 11 12 |
|
tpl.html
1 2 3 4 5 6 7 |
|
include
1 2 3 4 5 6 7 8 |
|
宏
1 2 3 4 5 |
|
#默认不显示,相当于定义了函数没执行,想要执行,需要调用
要用几次,就调用几遍
1 2 3 |
|
安全
前端做法
1 |
|
后端做法
1 |
|
注:Flask中的markup相当于Django中的mark_safe.
session
除请求对象之外,还有一个 session 对象。它允许你在不同请求间存储特定用户的信息。它是在 Cookies 的基础上实现的,并且对 Cookies 进行密钥签名要使用会话,你需要设置一个密钥。
设置:session['username'] = 'xxx'
- 删除:session.pop('username', None)
基本使用
自定义session
第三方session
总结
以加密的形式放到浏览器的cookie里面。
用户浏览器可以禁用cookie,禁用掉之后就不能用。用户登录就不能成功。
请求进来去cookie中把数据拿到,拿到之后将数据解密并反序列化成字典放到内存,让视图函数使用,视图函数使用完交给其他人,再进行序列化加密放到session中去,
本质:放到session,再给他移除掉。
当请求刚到来:flask读取cookie中session对应的值:eyJrMiI6NDU2LCJ1c2VyIjoib2xkYm95,将该值解密并反序列化成字典,放入内存以便视图函数使用。
视图函数:
1 2 3 4 5 6 7 |
|
session是以字典的形式保存在cookie中,字典有啥操作,它就有啥操作。
当请求结束时,flask会读取内存中字典的值,进行序列化+加密,写入到用户cookie中。
可以在配置文件中对相应的配置进行修改。
生命周期默认是31天,可以修改。Django中cookie生命周期默认是2周。
闪现
是一个基于Session实现的用于保存数据的集合,其特点是:使用一次就删除。
在session中存储一个数据,读取时通过pop将数据移除。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
中间件
请求执行wsgi.app之前和之后定制一些操作,用的是call方法。
Django和Falsk请求源码的入口就是call方法。
call方法什么时候触发?
用户发起请求时,才执行。
任务
在执行call方法之前,做一个操作,call方法执行之后做一个操作。
方式一:改源码
方式二:
1 2 3 4 5 6 7 8 9 10 11 12 |
|
Django中的中间件是请求和响应时做一些操作,而Flask中间件是自定义一些操作。在请求执行之前和执行之后定制一些操作。
Flask源码入口:
蓝图(blueprint)
目标
给开发者提供目录结构
简单蓝图步骤:
- 创建一个跟项目名同名的目录。
- 在跟项目名同名的目录下新建__init__.py
- 新建函数下实例化app
- 在项目下新建manage.py
- 导入app
- 在目录下创建views文件夹,放所有的视图,根据不同的业务建相应的py文件
- 在视图py文件中新建蓝图,并实例化蓝图对象
- 在__init__.py文件中导入蓝图并注册
- 在目录下新建templates文件夹,放所有的模板
- 在目录下新建static文件夹,放所有的静态文件
总结:
- 目录结构的划分;
- 前缀;
- 特殊装饰器;
其他
1、如果某一个蓝图想在别的地方找模板,怎么办?
如上所示,在实例化蓝图中可以自定义模板位置。那蓝图如果想用模板怎么找?
先找目录下的template下的,没有才去蓝图中找。跟Django一样。(先在项目中找,没找到再去app中去找。)
2、还可以给某一类加前缀。
在每次执行前都要加上前缀,否则报错。
3、可以给某一类添加before_request
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
这个什么时候用到呢?
登录认证。
只要登录成功才能访问的蓝图中就加before_request.
特殊装饰器
before_request
- 不需要加参数
- 没有返回值
- 谁先定义谁先执行(Django框架中间件的process_request)
after_request
- 需要至少加一个参数
- 要有返回值
- 谁后定义谁先执行(Django框架中间件的process_response)(内部反转了一下)
flask与django1.9版本之前,不管请求函数有没有return,中间件响应函数都执行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
|
before_first_request
项目启动起来,第一次请求才执行。
是一个标识,最开始是True,第一次请求之后改为False,就不再执行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
template_global
给模板用
1 2 3 4 |
|
template_filter
给模板用
1 2 3 4 |
|
errorhandler
定制错误页面
1 2 3 4 |
|
flask 配置文件和学习资料相关推荐
- Django介绍和虚拟环境(django特点、MVC、MVT、Django学习资料)
MVT流程: 创建Django项目和应用 django-admin startproject name python manager.py startapp name 视图和ULR 视图的请求和响应 ...
- python教程是用什么博客写的-Python 有哪些好的学习资料或者博客?
Python语言本身的话,建议不要去看很多资料.我推荐以下三本,分别对应入门.进阶.专家三个级别:官方文档 : 直接看最新的就行了,没必要看python2的老文档.入门的话没必要全看完,直接看语言部分 ...
- .NET Core 学习资料精选:入门
开源跨平台的.NET Core,还没上车的赶紧的,来不及解释了-- 本系列文章,主要分享一些.NET Core比较优秀的社区资料和微软官方资料.我进行了知识点归类,让大家可以更清晰的学习.NET Co ...
- .NET Core 学习资料精选:进阶
2019.09月就要正式发布.NET 3.0了,对于前一篇博文<.NET Core 学习资料精选:入门>大家学的可还开心?这是本系列的第二篇文章:进阶篇,喜欢的园友速度学起来啊. 对于还在 ...
- python全套学习方法_python学习方法总结(内附python全套学习资料)
种一棵树最好的时间是十年前,第二好的时间是现在 (文末有资料获取方法) 先聊聊互联网转行那些事儿 很多人是小白,想从事或转行互联网,想以python为切入口,那么恭喜你,这可能是你离互联网工作最捷径的 ...
- 如何快学会python??内附python学习资料
python目前应用最广的三个岗位:全栈开发.数据分析.运维开发,今天我们就以这三个重点的岗位来做一下自学Python的规划,希望你在学之前就能有明确的学习方向. 最近开始整理python的资料,博主 ...
- 熬夜整理了2021年Python最新学习资料,分享给学弟学妹们【大学生必备】
Python最新学习资料和视频 一.Python软件 安装教程 视频教程 二.学习规划 阶段一:Python基础 阶段二:Python核心编程 阶段三:web前端开发 阶段四:数据库 阶段五:后端开发 ...
- 【neutron】OpenStack Neutron -- 学习资料
OpenStack Neutron -- 学习资料 学习什么 neutron代码的整体架构,消息通知.rpc如何实现,RESTful API如何实现 neutron的部署,常见问题的定位方法 neut ...
- Python学习资料全面总结,真的对零基础很有用
把手里积累了这么久的Python入门资料整理了一下,发现其实,有了这些,python入门真的不难,每天花点时间学,真的不会影响工作.下面一起来看看这些资料吧! 可以学习python的地方 Python ...
最新文章
- LeetCode简单题之机器人能否返回原点
- 狂神说Java学习笔记 Java基础
- QT5开发及实例学习之七布局管理
- Python基础----Pandas
- LeetCode刷题(18)
- oem718d 基准站设置_华测口袋RTK正式发布!-华测导航
- 西安交通大学网络教育计算机考试题,西安交通大学《大学计算机基础》理论考试试题.doc...
- 面试常见的八股文记录
- VS Code设置缩进两个字符
- BAT脚本编写教程(比较易懂和全面)
- 5M的开源桌面整理软件,麻雀虽小,功能十分强大
- 数字三角形的多种解法思路
- Florian%C3%B3polis巴西北岸新业务的最佳场所四方数据分析
- sd卡测速工具_SD卡数据恢复教程与恢复方法
- Redis网站热搜关键词加载实践,建议收藏
- 18届清华硕士狂拿18家互联网公司sp offer总结
- RADOS:一种可扩展高可用的PB级存储集群(Ceph)
- XP中如何配置和共享打印机
- 苹果微信王者荣耀哪个服务器人多,王者荣耀:QQ区和微信区哪个玩家多?看完会明白...
- 系统流畅度测试软件,三大系统运行速度对比测试
热门文章
- 项目2---机柜和物理服务器
- glance服务上传镜像的时候,报错HTTPInternalServerError (HTTP 500)
- mysql preparedstatement 批量update,PreparedStatement的批量更新的有关问题(只执行最后一条插入语句)...
- 玩转python轻松过二级 百度网盘,玩转Python轻松过二级
- python indices,python – 什么“indices参数被弃用并将被删除(假设为True)0.17”是什么意思?...
- GPU深度发掘(一)::GPGPU数学基础教程
- jboss7 java版本,jdk 1.7推荐使用什么社区版本的Jboss以及为什么
- java 在数组末尾添加元素_Java集合05——LinkedList
- jsp 跳到servlet路径_直接访问Jsp和从Servlet跳转到Jsp时的路径问题
- MySQL约束不起作用怎么解决_MySQL中的CHECK约束不起作用