- 蓝图:
- 蓝图:用于实现单个应用的视图、模板、静态文件的集合
- 蓝图是Flask框架应用程序组件化的方法,可以在一个应用内或跨越多个项目共用蓝图,使用蓝图可以极大地简化大型应用的开发难度,也为Flask扩展提供了一种在应用中注册服务的集中化机制
- 步骤:创建蓝图对象 ;使用蓝图对象注册路由;使用应用注册蓝图对象
- 通常蓝图文件放在名为handlers目录下,模板文件放到templates目录下
截图来源:Flask笔记(个人博客)
- 基础模板文件:templates/base.html
- 配置文件:通常 Flask Web 项目的配置文件是 configs.py,它与 app.py 同处于一个目录下,注意的是所有配置项的名字必须为全大写,否则会被忽略
- BaseConfig: 基础配置类,存储公共配置项
- DevConfig(BaseConfig): 开发阶段使用的配置类
- TestConfig(BaseConfig): 测试阶段使用的配置类
- flask-sqlalchemy 实现 模型(Model,即Class类)与数据库表(table)的映射
- 对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。
7. linux启动mysql服务命令:$ sudo service mysql start(若后期出现报错:qlalchemy.exc.OperationalError: (MySQLdb._exceptions.OperationalError) (2002, “Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (111)”),请输入以上代码启动 mysql 服务)
8. 为应用增加环境变量:$ export FLASK_DEBUG=1 FLASK_APP=manage.py(当之后实验出现报错 Error: Could not locate a Flask application. You did not provide the “FLASK_APP” environment variable, and a “wsgi.py” or “app.py” module was not found in the current directory.,请输入以上代码增加环境变量)
这样就不必每次启动应用的时候在命令开始处写 FLASK_APP=manage.py 了
9. flask db migrate 和 flask db upgrade 命令创建迁移文件和执行迁移,每次执行 flask db migrate 命令时,都会生成一个新的版本(Flask-Migrate 实现的数据迁移功能其实就是把数据表的结构信息存储到一个文件中,执行迁移命令即可利用该文件来创建数据表。它还支持撤销版本的功能)
10. Flask Web 应用需要提供 SMTP 服务器地址和端口号,各家的邮箱的服务器地址和端口号是不同的,这个需要上网查询。QQ 邮箱的地址及其端口号是 ‘smtp.qq.com’ 和 25
11. 应用实例需要知道对每个URL的请求要运行哪些代码,所以保存了一个URL到Python函数的映射关系。处理URL和函数之间关系的程序称为路由
12. 在Flask中有两种上下文:应用上下文和请求上下文
13. Flask通过上下文变量request对外开放请求对象。这个对象非常有用,包含客户端发送的HTTP请求的全部信息。Flask请求对象中最常用的属性和方法如下
14. 四种请求钩子
在请求钩子函数和视图函数之间共享数据一般使用上下文全局变量g。例如,before request处理程序可以从数据库中加载已登录用户,并将其保存到g.user中。随后调用视图函数时,便可以通过g.user获取用户。
注册一个函数,在每次请求之前运行: before request
注册一个函数,只在处理第一个请求之前运行(可以通过这个钩子添加服务器初始化任务): before first request
注册一个函数,如果没有未处理的异常抛出,在每次请求之后运行: after request
注册一个函数,即使有未处理的异常抛出,也在每次请求之后运行: teardown request
- 响应有个特殊的类型,称为重定向。这种响应没有页面文档,只会告诉浏览器一个新URL,用以加载新页面。重定向经常在Web表单中使用,重定向的状态码通常是302,Flask使用redirect()函数来生成重定向响应
from flask import Flask
@app.route('/')
def index():
return redirect('http://www.xxx.example.com')
还有一种特殊的响应由abort()函数生成,用于处理错误,抛出异常
-
视图函数的作用:生成请求的响应
-
Flask提供的render template()函数把Jinja2模板引擎集成到了应用中。这个函数的第一个参数是模板的文件名,随后的参数都是键-值对,表示模板中变量对应的具体值, 如
在这段代码中,第二个模板收到一个名为name的变量 -
Jinja2提供的部分常用过滤器
-
部分常用控制结构
-
个人对引入(include)和继承(extend)的理解:include在原模版插入小的板块,extend在基模板上进行拓展
-
传给url for()的关键字参数不仅限于动态路由中的参数,非动态的参数也会添加到查询字符串中。例如,url for(‘user’, name=‘john’, page=2, version=1)的返回结果是/user/john? page=2&version=1
-
-
@property的理解