Flask相关

一、Flask运行过程

1、当客户端想要获取资源时,一般会通过浏览器发起HTTP请求

2、此时,Web服务器会把来自客户端的所有请求都交给Flask程序实例

3、程序实例使用Werkzeug来做路由分发

4、根据每个URL请求,找到具体的视图函数并进行调用

5、Flask调用视图后,可以返回两种内容:字符串、HTML模板内容

二、Flask中WTF表单

WTForms支持的HTML标准字段:

StringField(文本字段)、IntegerField(文本字段,值为整数)、RadioField(一组单选框)、SelectField(下拉列表)、SubmitField(表单提交按钮)

使用Flask-WTF需要配置SECRET_KEY。

三、Flask中的session

1、数据库中的session,db.session.add()

2、flask_session扩展中的session,可以把信息存在服务器中,客户端浏览器只存储sessionid

3、flask自带的session,是一个请求上下文,把信息加密后存储在客户端浏览器cookie

四、Flask依赖的组件

Route(路由)、templates(模板)、Models(orm模型)、blueprint(蓝图)、Jinja2模板引擎

第三方组件:flask_bootstrap、flask-WTF、flask_sqlalchemy

五、Werkzeug与jinja2

Werkzeug:Werkzeug就Flask使用的底层WSGI库,Werkzeug 提供了 python web WSGI 开发相关的功能:

  1. 路由处理:如何根据请求 URL 找到对应的视图函数
  2. request 和 response 封装:提供更好的方式处理request和生成response对象
  3. 自带的 WSGI server:测试环境运行WSGI应用

Jinja2:Jinja2是基于python的模板引擎

六、Flask、Django、Tornado比较

Django:大而全的方向,开发效率高。它的MTV框架自带的ORM,admin后台管理,sqlite数据库和开发测试用的服务器

Flask:轻量级的框架,自由、灵活、可扩展性很强,核心基于Werkzeug WSGI工具和jinja2模板引擎

Tornado走的是少而精的方向,性能优越。它最出名的是异步非阻塞的设计方式

Tornado的两大核心模块:1.iostraem:对非阻塞式的socket进行简单的封装 2.ioloop:对I/O多路复用的封装,它实现了一个单例

七、请求上下文和应用上下文

请求上下文:保存了客户端和服务器交互的数据。(request、session)

应用上下文:Flask应用程序运行中,保存的一些配置信息,如程序名、数据库连接、应用信息等。(current_app、g)

八、Restful架构及设计

1、每个URL代表一种资源

2、客户端和服务器之间,传递这种资源的某种表现层

3、客户端通过四个http动词,对服务器资源进行操作,实现表现层状态转换

如何设计

1、域名。将api部署到专用域名或主域名下

2、版本。将api版本号放到URL中

3、路径。路径表示api具体网址,网址中不能有动词只能有名词且名词要用复数。

4、使用标准的HTTP方法。GET\POST\PUT\DELETE

5、过滤信息。如果资源过多,api应该提供参数,过滤返回结果

6、状态码。服务器向用户返回的状态码和提示信息。

7、错误信息。以键值对形式返回错误信息

九、Flask蓝图

蓝图是Flask应用程序组件化的方法,可以在一个应用内或跨越多个项目公用蓝图。使用蓝图可以极大简化大型应用的开发难度。

使用蓝图的三个步骤:

1、创建一个蓝图对象

2、在蓝图对象上操作,如注册路由、指定静态文件夹

3、在应用对象上注册这个蓝图对象

十、Flask请求钩子

1、before_first_request:在处理第一个请求前运行

2、before_request:在每次请求前运行

3、after_request:如果没有未处理的异常抛出,在每次请求后运行

4、teardown_request:即使有未处理的异常抛出,在每次运行后运行

十一、Flask与Django路由映射的区别

Django中路由是浏览器访问服务器时,先访问的项目中的URL,再由URL找到应用中URL,这些URL放在一个列表里,遵循从前往后匹配的规则。

Flask中路由通过装饰器给每个视图函数提供的,而且根据请求方式的不同可以一个URL用于不同的作用。

十二、MVC、MVT

M:模型,和数据库进行交互

V:视图,负责产生HTML页面

C:控制器,接受请求,进行处理,与M和V进行交互,返回应答

1、用户点击注册按钮,将信息发送给网站服务器

2、控制器接收到用户信息,会告诉Model层将信息保存到数据库

3、Model层将数据保存到数据库。数据保存之后结果会返回给Model模型,Model层将结果返回给控制器

4、控制器接收到保存结果之后,告诉View产生一个HTML页面。View将产生的页面返回给控制器

5、控制器将HTML内容返回给浏览器,浏览器进行解析展示

M:模型。

V:视图,同MVC中C

T:模板,同MVC中V

1、用户点击注册按钮,将信息发送给网站服务器

2、View接收到用户信息,会告诉Model将数据保存到数据库

3、Model层将数据保存到数据库。数据保存之后结果会返回给Model模型,Model层将结果返回给View

4、View接收到保存结果之后,告诉Template产生一个HTML页面。Template将产生的页面返回给View

5、View将HTML内容返回给浏览器,浏览器进行解析展示

十三、uWSGI和Nginx如何配合工作

WSGI是一种通信协议

uwsgi是一种线路协议

uWSGI是实现了uwsgi和WSGI两种协议的Web服务器

1、浏览器发起HTTP请求到Nginx服务器,Nginx接收到请求,进行URL分析,判断访问的资源类型

2、如果是静态资源,直接读取静态资源返回给浏览器

3、如果是动态资源交给uWSGI服务器,服务器根据WSGI和uwsgi协议,找到对应的Django框架,待框架下的应用进行逻辑处理之后,将返回值发送给uWSGI服务器,然后再返回给Nginx,最后又Nginx返回给浏览器进行渲染展示

十四、Celery分布式任务队列

用户发起Request,并等待Response返回。有的可能需要执行一段耗时的程序,那么用户就需要等待很长时间,如发送邮件、手机验证码。

使用Celery,将耗时的程序放到Celery中执行。

posted @ 2019-08-30 21:41  尘世中一个迷途小书童  阅读(177)  评论(0编辑  收藏  举报