Flask基本问题

 

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

概念解释

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

优势

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

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,而与非关系型数据库的结合远远优于Djangoweb


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

 

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

在 Flask 中,为了处理 web 表单,咱们通常使用 Flask-WTF 扩展,它封装了 WTForms,而且它有 验证表单数据的功能。shell

使用 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,已面向对象的方式进行数据库的链接与操做flask

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

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

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

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

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

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

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

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

八、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:即便有未处理的异常抛出,在每次请求后运行

相关文章
相关标签/搜索