• 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方法。GETPOSTPUTDELETE

    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中执行。

  • 相关阅读:
    IntelliJ IDEA 使用总结[zz]
    “vmware tools 只能虚拟机中安装”的解决方法
    Git 少用 Pull 多用 Fetch 和 Merge
    hypervisor与VMware共存方法
    rsa && sha1 js code
    PHP导出数据库方法
    Git中的AutoCRLF与SafeCRLF换行符问题
    DOTA2参数收集
    HelloGitHub.com 网站开源了
    第 10 篇 评论接口
  • 原文地址:https://www.cnblogs.com/kingshine007/p/11437263.html
Copyright © 2020-2023  润新知