(1) 第1章:创建app,Flask对象,flask插件注册到app上

Flask:核心对象
核心对象里承载了各种各样的功能,比如保存配置信息,再比如注册路由试图函数等
AppContext:对Flask的封装,并且增加了一些额外的参数
Request:保存了请求信息,比如url的参数,url的全路径等信息
RequestContext:对Request的封装

我们在实际编码过程中,可能是需要Flask或者Request的信息的,但是这并不代表我们应该直接导入这两个对象获取相关信息,正确的做法是从AppContextRequestContext中间接的获得我们需要的信息

即使这样,我们也没有必要导入Context去使用上下文,这就回到了current_apprequest这些LocalProxy,他们提供了间接操作上下文对象的能力,使用了代理(LocalProxy)模式

flask工作原理
1、当一个请求进入Flask框架,首先会实例化一个Request Context,这个上下文封装了请求的信息在Request中,并将这个上下文推入到一个栈**(_request_ctx_stack/_app_ctx_strack)**的结构中,即之前将的push方法

2RequestContext在入**_request_ctx_stack之前,首先会检查_app_ctx_strack是否为空,如果为空,则会把一个AppContext的对象入栈,然后再将这个请求入栈到_request_ctx_stack**中

3、我们的current_apprequest对象都是永远指**_app_ctx_strack**/_request_ctx_stack的栈顶元素,也就是分别指向了两个上下文,如果这两个值是空的,那么LocalProxy(代理)就会出现unbound的状态

4、当请求结束的时候,这个请求会出栈-pop

实例化,构造函数的参数会作为Flask app核心对象的标识
app = Flask(name)

from flask import Flask
app = Flask(__name__)
# 通过app.config.from_object导入配置文件
# 配置文件的内容统一要大写,这是一个原则
app.config.from_object('app.secure')
app.config.from_object('app.setting')
registe_blueprint(app)
# 注册LoginManager
login_manager.init_app(app)
cache.init_app(app)#把缓存机制注册到app上
mail.init_app(app)#在app上注册邮箱模块

启动web app

**debug=True:**开启调试模式—>1.修改文件后不用每次都重启服务器 2.可以在网页中显示异常
**host:**可以指定可以访问本网站的ip地址
**port:**启动端口
**threaded:**开启多线程

from app import create_app
app = create_app()
if __name__ == '__main__':
	app.run(host="0.0.0.0", port=81, debug=True,threaded=True)

通过导入current_app获取当前app对象,一般用来实现配置文件数据的获取

from flask import current_app
current_app.config['XXX']
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值