Flask基本问题

 

1.   什么是Flask,有什么优点?

概念解释

Flask是一个Web框架,就是提供一个工具,库和技术来允许你构建一个Web应用程序。这个Web应用程序可以是一些Web页面,博客,wiki,基于Web的应用或商业网站。

优点

Flask属于微框架(micro-framework)这一类别,微架构通常是很小的不依赖外部库的框架。 
- 框架很轻量 
- 更新时依赖小 
- 专注于安全方面的bug

Flask的依赖

  • Werkzeug 一个WSGI工具包(web服务网关接口(Python Web Server Gateway Interface,缩写为WSGI)是为python语言定义的web服务器和web应用程序或框架之间的一种简单而通用的借口,其他语言也有类似的接口)
  • jinja2模板引擎
  • 轻量级web框架,默认依赖两个外部库:jinja2和Werkzeug WSGI工具
  • 适用于做小型网站以及web服务的API,开发大型网站无压力,但架构需要自己设计
  • 与关系型数据库的结合不弱于Django,而与非关系型数据库的结合远远优于Django
  • 重量级web框架,功能齐全,提供一站式解决的思路,能让开发者不用在选择上花费大量时间。
  • 自带ORM(Object-Relational Mapping 对象关系映射)和模板引擎,支持jinja等非官方模板引擎。
  • 自带ORM使Django和关系型数据库耦合度高,如果要使用非关系型数据库,需要使用第三方库
  • 自带数据库管理app
  • 成熟,稳定,开发效率高,相对于Flask,Django的整体封闭性比较好,适合做企业级网站的开发。
  • python web框架的先驱,第三方库丰富

2. Django和Flask有什么区别?

Flask
轻量级web框架,默认依赖两个外部库:jinja2和Werkzeug WSGI工具
适用于做小型网站以及web服务的API,开发大型网站无压力,但架构需要自己设计
与关系型数据库的结合不弱于Django,而与非关系型数据库的结合远远优于Django


Django
重量级web框架,功能齐全,提供一站式解决的思路,能让开发者不用在选择上花费大量时间。
自带ORM(Object-Relational Mapping 对象关系映射)和模板引擎,支持jinja等非官方模板引擎。
自带ORM使Django和关系型数据库耦合度高,如果要使用非关系型数据库,需要使用第三方库
自带数据库管理app
成熟,稳定,开发效率高,相对于Flask,Django的整体封闭性比较好,适合做企业级网站的开发。
python web框架的先驱,第三方库丰富

3. Flask-WTF是什么,有什么特点?

在 Flask 中,为了处理 web 表单,我们一般使用 Flask-WTF 扩展,它封装了 WTForms,并且它有 验证表单数据的功能。

使用 Flask-WTF 需要配置参数 SECRET_KEY。
CSRF_ENABLED 是为了 CSRF(跨站请求伪造)保护。 SECRET_KEY 用来生成加密令牌,当 CSRF 激 活的时候,该设置会根据设置的密匙生成加密令牌。

4. Flask脚本的常用方式是什么?

  • 在shell中运行脚本文件
  • 在python编译器中run
  • 会话(seesion)会话数据存储在服务器上。 会话是客户端登录到服务器并注销的时间间隔。 需要在此会话中进行的数据存储在服务器上的临时目录中。
  • from flask import session导入会话对象
  • session[‘name’] = ‘admin’给会话添加变量
  • session.pop(‘username’, None)删除会话的变量
  • 在脚本中以用第三方库正常连接,用sql语句正常操作数据库,如mysql关系型数据库的pymsql库
  • 用ORM来进行数据库连接,flask中典型的flask_sqlalchemy,已面向对象的方式进行数据库的连接与操作

5. 如何在Flask中访问会话?

会话(seesion)会话数据存储在服务器上。 会话是客户端登录到服务器并注销的时间间隔。 需要在此会话中进行的数据存储在服务器上的临时目录中。
from flask import session导入会话对象
session[‘name’] = ‘admin’给会话添加变量
session.pop(‘username’, None)删除会话的变量

6. 解释Python Flask中的数据库连接?

python中的数据库连接有两种方式

在脚本中以用第三方库正常连接,用sql语句正常操作数据库,如mysql关系型数据库的pymsql库
用ORM来进行数据库连接,flask中典型的flask_sqlalchemy,已面向对象的方式进行数据库的连接与操作

7. 列举Http请求中常见的请求方式?

1、opions 返回服务器针对特定资源所支持的HTML请求方法 或web服务器发送*测试服务器功能(允许客户端查看服务器性能)

2、Get 向特定资源发出请求(请求指定页面信息,并返回实体主体)

3、Post 向指定资源提交数据进行处理请求(提交表单、上传文件),又可能导致新的资源的建立或原有资源的修改

4、Put 向指定资源位置上上传其最新内容(从客户端向服务器传送的数据取代指定文档的内容)

5、Head 与服务器索与get请求一致的相应,响应体不会返回,获取包含在小消息头中的原信息(与get请求类似,返回的响应中没有具体内容,用于获取报头)

6、Delete 请求服务器删除request-URL所标示的资源*(请求服务器删除页面)

7、Trace 回显服务器收到的请求,用于测试和诊断

8、Connect HTTP/1.1协议中能够将连接改为管道方式的代理服务http服务器至少能实现get、head、post方法,其他都是可选的

8. 列举Http请求中的状态码?

1xx —— 元数据 
2xx —— 正确的响应 
3xx —— 重定向 
4xx —— 客户端错误 
5xx —— 服务端错误 

100 Continue。客户端应当继续发送请求。 
200 OK。请求已成功,请求所希望的响应头或数据体将随此响应返回。 
201 Created。请求成功,并且服务器创建了新的资源。 
301 Moved Permanently。请求的网页已永久移动到新位置。 服务器返回此响应(对GET或HEAD请求的响应)时,会自动将请求者转到新位置。

302 Found。服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。 
400 Bad Request。服务器不理解请求的语法。 
401 Unauthorized。请求要求身份验证。对于需要登录的网页,服务器可能返回此响应。 
403 Forbidden。服务器拒绝请求。 
404 Not Found。服务器找不到请求的网页。 
500 Internal Server Error。服务器遇到错误,无法完成请求。

9. 列举Http请求中常见的请求头?

  • User-Agent:浏览器类型,如果Servlet返回的内容与浏览器类型有关则该值非常有用。
  • Cookie:这是最重要的请求头信息之一
  • Content-Type:请求类型

10. 什么是wsgi?

  1. WSGI(Web Server Gateway Interface,Web 服务器网关接口)则是Python语言中1所定义的Web服务器和Web应用程序之间或框架之间的通用接口标准。
  2. WSGI就是一座桥梁,桥梁的一端称为服务端或网关端,另一端称为应用端或者框架端,WSGI的作用就是在协议之间进行转化。WSGI将Web组件分成了三类:Web 服务器(WSGI Server)、Web中间件(WSGI Middleware)与Web应用程序(WSGI Application)。
  3. Web Server接收HTTP请求,封装一系列环境变量,按照WSGI接口标准调用注册的WSGI Application,最后将响应返回给客户端。

11. Flask框架依赖组件?

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

12. Flask蓝图的作用?

蓝图 /Blueprint 是 Flask 应用程序组件化的方法,可以在一个应用内或跨越多个项目共用蓝图。 使用蓝图可以极大地简化大型应用的开发难度,也为 Flask 扩展 提供了一种在应用中注册服务的集中 式机制。

蓝图可以分为三个步骤:

1,创建一个蓝图对象

admin=Blueprint('admin',__name__)

2,在这个蓝图对象上进行操作,注册路由,指定静态文件夹,注册模版过滤器

@admin.route('/')

def admin_home():

    return 'admin_home'

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

app.register_blueprint(admin,url\_prefix='/admin')

蓝图的作用:

  • 将不同的功能模块化
  • 构建大型应用
  • 优化项目结构
  • 增强可读性,易于维护(跟Django的view功能相似)

13. 列举使用过的Flask第三方组件?

  • flask_bootstrap
  • flask-WTF
  • flask_sqlalchemy

14. Flask 中请求上下文和应用上下文的区别和作用?

current_app、g 是应用上下文。 request、session 是请求上下文。

两者区别:
请求上下文:保存了客户端和服务器交互的数据。
应用上下文:flask 应用程序运行过程中,保存的一些配置信息,比如程序名、数据库连接、应用信息等。
两者作用:

请求上下文(request context):

Flask 从客户端收到请求时,要让视图函数能访问一些对象,这样才能处理请求。请求对象是一 个很好的例子,它封装了客户端发送的 HTTP 请求。 要想让视图函数能够访问请求对象,一个显而易见的方式是将其作为参数传入视图函数,不过这会导致程序中的每个视图函数都增加一个参数,除了访问请求对象,如果视图函数在处理请求时还 要访问其他对象,情况会变得更糟。为了避免大量可有可无的参数把视图函数弄得一团糟,Flask 使用上下文临时把某些对象变为全局可访问。

应用上下文(application context):
它的字面意思是 应用上下文,但它不是一直存在的,它只是 request context 中的一个对 app的代理(人),所谓 local proxy。它的作用主要是帮助 request 获取当前的应用,它是伴 request 而 生,随 request 而灭的。

15. Flask框架默认session处理机制?

Flask 中有三个 session:
第一个:数据库中的 session,例如:db.session.add()
第二个:在 flask_session 扩展中的 session,使用:from flask_session importSession,使用

第三方扩展的 session 可以把信息存储在服务器中,客户端浏览器中只存储 sessionid。 第三个:flask 自带的 session,是一个请求上下文,使用:from flask import session。自带的session 把信息加密后都存储在客户端的浏览器 cookie 中。Flask的默认session利用了Werkzeug的SecureCookie,把信息做序列化(pickle)后编码(base64),放到cookie里了。过期时间是通过cookie的过期时间实现的。为了防止cookie内容被篡改,session会自动打上一个叫session的hash串,这个串是经过session内容、SECRET_KEY计算出来的,看得出,这种设计虽然不能保证session里的内容不泄露,但至少防止了不被篡改。

16. ORM的实现原理?

概念: 对象关系映射(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。

几乎所有的程序里面,都存在对象和关系数据库。在业务逻辑层和用户界面层中,我们是面向对象的。当对象信息发生变化的时候,我们需要把对象的信息保存在关系数据库中。 
    ORM解决的主要问题是对象关系的映射。域模型和关系模型分别是建立在概念模型的基础上的。域模型是面向对象的,而关系模型是面向关系的。一般情况下,一个持久化类和一个表对应,类的每个实例对应表中的一条记录,类的每个属性对应表的每个字段。

ORM技术特点:

1.提高了开发效率。由于ORM可以自动对Entity对象与数据库中的Table进行字段与属性的映射,所以我们实际可能已经不需要一个专用的、庞大的数据访问层。 
2.ORM提供了对数据库的映射,不用sql直接编码,能够像操作对象一样从数据库获取数据。

17.Flask 中请求钩子的理解?

为了让每个视图函数避免编写重复功能的代码,Flask提供了通用设施的功能,请求钩子。

请求钩子是通过装饰器的形式实现的,支持以下四种:

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

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

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

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

原文地址:https://www.cnblogs.com/Jack666/p/9548215.html