flask面试常问问题总结

1. 解释什么是Flask及其好处?

Flask是一个Python编写的Web微框架,让我们可以使用Python语言快速实现一个网站或Web服务。

2. Django和Flask有什么区别?

Flask

  1. Flask确实很“轻”,不愧是Micro Framework,从Django转向Flask的开发者一定会如此感慨,除非二者均为深入使用过
  2. Flask自由、灵活,可扩展性强,第三方库的选择面广,开发时可以结合自己最喜欢用的轮子,也能结合最流行最强大的Python库
  3. 入门简单,即便没有多少web开发经验,也能很快做出网站
  4. 非常适用于小型网站
  5. 非常适用于开发web服务的API
  6. 开发大型网站无压力,但代码架构需要自己设计,开发成本取决于开发者的能力
  7. 各方面性能均等于或优于Django
  8. Django自带的或第三方的好评如潮的功能,Flask上总会找到与之类似第三方
  9. Flask灵活开发,Python高手基本都会喜欢Flask,但对Django却可能褒贬不
  10. Flask与关系型数据库的配合使用不弱于Django,而其与NoSQL数据库的配合远远优于Django
  11. Flask比Django更加Pythonic,与Python的philosophy更加吻合

Django

  1. Django太重了,除了web框架,自带ORM和模板引擎,灵活和自由度不够高
  2. Django能开发小应用,但总会有“杀鸡焉用牛刀”的感觉
  3. Django的自带ORM非常优秀,综合评价略高于SQLAlchemy
  4. Django自带的模板引擎简单好用,但其强大程度和综合评价略低于Jinja2
  5. Django自带ORM也使Django与关系型数据库耦合度过高,如果想使用MongoDB等NoSQL数据,需要选取合适的第三方库,且总感觉Django+SQL才是天生一对的搭配,Django+NoSQL砍掉了Django的半壁江山
  6. Django目前支持Jinja等非官方模板引擎
  7. Django自带的数据库管理app好评如潮
  8. Django非常适合企业级网站的开发:快速、靠谱、稳定
  9. Django成熟、稳定、完善,但相比于Flask,Django的整体生态相对封闭
  10. Django是Python web框架的先驱,用户多,第三方库最丰富,最好的Python库,如果不能直接用到Django中,也一定能找到与之对应的移植
  11. Django上手也比较容易,开发文档详细、完善,相关资料丰富

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

Flask的简单WTForms集成,包含CSRF、文件上传和Recaptcha集成。

flask-wtf可以保护表单免受跨站请求伪造(CSRF)的攻击,恶意网站将请求发送到被攻击者已登录的其他网站时就会引发CSRF

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

  • 在shell中运行脚本文件
  • 在python编译器中run

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

一个会话基本上允许记住从一个请求到另一个请求的信息。在Flask中,它使用签名的cookie,以便用户可以查看会话内容并进行修改。用户可以修改会话,只要它有密钥Flask.secret_key。

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

6. Flask是一个MVC模型吗?如果是,可以示例一下吗?

“””
基本上,Flask是一个简单的框架,其行为与MVC框架相同。所以MVC是Flask的完美选择.
“”“

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

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

8. 谈谈restful?

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

http请求中的8种请求方法

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方法,其他都是可选的

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

1xx: 信息

信息

2XX:成功

成功

3XX:重定向

重点向

4XX:客户端错误

客户端错误这里写图片描述

5XX:服务器错误

服务器错误

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

•Accept:浏览器可接受的MIME类型
•Accept-Charset: 浏览器通过这个头告诉服务器,它支持哪种字符集
•Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip
•Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到。可以在浏览器中进行设置。
•Host:初始URL中的主机和端口
•Referer:包含一个URL,用户从该URL代表的页面出发访问当前请求的页面
•Content-Type:内容类型
•If-Modified-Since: Wed, 02 Feb 201112:04:56 GMT利用这个头与服务器的文件进行比对,如果一致,则从缓存中直接读取文件。
•User-Agent:浏览器类型.
•Content-Length:表示请求消息正文的长度
•Connection:表示是否需要持久连接。如果服务器看到这里的值为“Keep -Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接
•Cookie:这是最重要的请求头信息之一
•Date:Date: Mon, 22 Aug 2011 01:55:39 GMT请求时间GMT

12. 什么是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,最后将响应返回给客户端。

13. Flask框架依赖组件?

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

14. Flask蓝图的作用?

蓝图Blueprint实现模块化的应用

book_bp = Blueprint(‘book’, name)创建蓝图对象

蓝图中使用路由@book_bp.route(‘url’)
在另一.py文件里导入和注册蓝图

from book import book_bp app.register_blueprint(book_bp)

作用

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

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

  • flask_bootstrap
  • flask-WTF
  • flask_sqlalchemy

16. 简述Flask上下文管理流程?

每次有请求过来的时候,flask 会先创建当前线程或者进程需要处理的两个重要上下文对象,把它们保存到隔离的栈里面,这样视图函数进行处理的时候就能直接从栈上获取这些信息。

17. Flask中多app应用是怎么完成?

请求进来时,可以根据URL的不同,交给不同的APP处理

18. wtforms组件的作用?

WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证。

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

Flask的默认session利用了Werkzeug的SecureCookie,把信息做序列化(pickle)后编码(base64),放到cookie里了。

过期时间是通过cookie的过期时间实现的。

为了防止cookie内容被篡改,session会自动打上一个叫session的hash串,这个串是经过session内容、SECRET_KEY计算出来的,看得出,这种设计虽然不能保证session里的内容不泄露,但至少防止了不被篡改

20. ORM的实现原理?

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

详细介绍:让我们从O/R开始。字母O起源于”对象”(Object),而R则来自于”关系”(Relational)。几乎所有的程序里面,都存在对象和关系数据库。在业务逻辑层和用户界面层中,我们是面向对象的。当对象信息发生变化的时候,我们需要把对象的信息保存在关系数据库中。
当你开发一个应用程序的时候(不使用O/R Mapping),你可能会写不少数据访问层的代码,用来从数据库保存,删除,读取对象信息,等等。你在DAL中写了很多的方法来读取对象数据,改变状态对象等等任务。而这些代码写起来总是重复的。
ORM解决的主要问题是对象关系的映射。域模型和关系模型分别是建立在概念模型的基础上的。域模型是面向对象的,而关系模型是面向关系的。一般情况下,一个持久化类和一个表对应,类的每个实例对应表中的一条记录,类的每个属性对应表的每个字段。

ORM技术特点:

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

猜你喜欢

转载自blog.csdn.net/qq_41891803/article/details/81272575