python面试题Flask
第九章 Flask
- 请手写一个flask的 Hello World。
- Flask框架的优势?
答:Flask框架小而精简 基于协程实现并发 请求上下文机制
- Flask框架依赖组件?
答:
Werkzeug 承载 Flask 应用 app.run 执行的就是 Werkzeug 中的 run_simple
Jinja2 模板语言支持组件
MarkupSafe 解决XSS攻击 及 模板安全标签字符串
- Flask蓝图的作用?
答:隔离应用 每一个蓝图是一个独立的 Application
- 列举使用过的Flask第三方组件?
答:
Flask-Session 三方Session组件 可将原生Session替换
Flask-SQLAlchemy ORM组件
Flask-Script Flask脚本支持
Flask-Migrate Flask数据库迁移 需Flask-SQLAlchemy和Flask-Script支持
Flask-CORS 解决Flask跨域问题
- 简述Flask上下文管理流程?
答:
请求进入app被序列化至*CTX对象中保存,并将*CTX对象储存在*_request_ctx_stack,在试图函数中使用request调用,request是一个*LocalProxy对象专门代理获取*_request_ctx_stack对象中的数据,当视图函数结束后,*_request_ctx_stack自动清除当前请求的*CTX所有信息
*CTX:序列化请求原始信息其中包含 app request session g
*_request_ctx_stack:LocalStack对象在其中包含一个Local对象
{
_local:
{
__storage__:
{
9527:{stack:[CTX]}
},
__ident_func__:get_ident
}
}
*LocalProxy: 本地代理对象,用于获取_request_ctx_stack:LocalStack中的数据
- Flask中的g的作用?
答:
g对象是专用用来保存用户的数据的。
g对象在一次请求中,全局可以调用。
- 如何编写flask的离线脚本?
答:
离线脚本是根据Flask应用上下文原理而来
1.编写离线脚本需要使用当前线上的Flask示例配置(Config)
2.应用上下文机制中 app.context() 对象支持 __enter__ 和 __exit__ 方法 所以可以使用with
- Flask中上下文管理主要涉及到了那些相关的类?并描述类主要作用?
答:
- 为什么要Flask把Local对象中的的值stack 维护成一个列表?
答:便于ctx对象的增删改查
- Flask中多app应用如何编写?
答:
- 在Flask中实现WebSocket需要什么组件?
答:
GeventWebsocket
在 Werkzeug 组件中也包含 Websocket 但是由于对并发的支持不好,所以一般不用
- wtforms组件的作用?
答:
1.由类去创建Form组件
2.定义Form错误信息
3.校验FormData中的数据
4.返回FormData中的错误信息
- Flask框架默认session处理机制?
答:
机制:交由客户端保管
方式:将Session字符串通过SecretKey加密后返回客户端,浏览器会自动记录在Cookie中建立一个值储存
- 解释Flask框架中的Local对象和threadinglocal对象的区别?
答:
Local对象是将每一个线程的数据写入到一个Stack中保管
Threadinglocal直接在内存中开辟一个新的空间存储对象
- SQLAlchemy中的 session和scoped_session 的区别?
答:
Session 创建会话 每次创建新的会话
scoped_session 只创建一次会话,重复调用一个会话
- SQLAlchemy如何执行原生SQL?
答:
- ORM的实现原理?
答:
将对象中的数据转换为原生SQL语句执行
操纵对象从而获得原生SQL语句
- DBUtils模块的作用?
答:
是Python针对数据库高可用的模块
通常用的最多的是 DBUtils 中的 PoolDB 数据库连接池
- 以下SQLAlchemy的字段是否正确?如果不正确请更正.
答:错题
- SQLAchemy中如何为表设置引擎和字符编码?
答:
- SQLAchemy中如何设置联合唯一索引?
答: