美文网首页
flask面试问题

flask面试问题

作者: 风雨声豪入梦中 | 来源:发表于2019-06-19 10:06 被阅读0次

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

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

    2. Django和Flask有什么区别?

    Flask

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

    Django

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

    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请求中的状态码?

    200 请求已成功,请求所希望的响应头或数据体将随此响应返回。
    201 请求已经被实现,而且有一个新的资源已经依据请求的需要而建立,且其 URI 已经随Location 头信息返回。
    201 请求已经被实现,而且有一个新的资源已经依据请求的需要而建立,且其 URI 已经随Location 头信息返回。
    203 服务器已成功处理了请求,但返回的实体头部元信息不是在原始服务器上有效的确定集合,而是来自本地或者第三方的拷贝。
    204 服务器成功处理了请求,但不需要返回任何实体内容,并且希望返回更新了的元信息。响应可能通过实体头部的形式,返回新的或更新后的元信息。如果存在这些头部信息,则应当与所请求的变量相呼应。 
    205 服务器成功处理了请求,且没有返回任何内容。
    206 服务器已经成功处理了部分 GET 请求
    207 由WebDAV(RFC 2518)扩展的状态码,代表之后的消息体将是一个XML消息,并且可能依照之前子请求数量的不同,包含一系列独立的响应代码。
    300 被请求的资源有一系列可供选择的回馈信息,每个都有自己特定的地址和浏览器驱动的商议信息。用户或浏览器能够自行选择一个首选的地址进行重定向。 
    301 被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个 URI 之一。
    302 请求的资源现在临时从不同的 URI 响应请求。由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求。
    303 对应当前请求的响应可以在另一个 URI 上被找到,而且客户端应当采用 GET 的方式访问那个资源。
    304 如果客户端发送了一个带条件的 GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个状态码。
    305 被请求的资源必须通过指定的代理才能被访问。
    306 在最新版的规范中,306状态码已经不再被使用。
    307 请求的资源现在临时从不同的URI 响应请求。
    400 1、语义有误,当前请求无法被服务器理解。除非进行修改,否则客户端不应该重复提交这个请求。   2、请求参数有误。
    401 当前请求需要用户验证。
    402 该状态码是为了将来可能的需求而预留的。
    403 服务器已经理解请求,但是拒绝执行它。
    404 请求失败,请求所希望得到的资源未被在服务器上发现。
    405 请求行中指定的请求方法不能被用于请求相应的资源。
    406 请求的资源的内容特性无法满足请求头中的条件,因而无法生成响应实体。
    407  与401响应类似,只不过客户端必须在代理服务器上进行身份验证。
    408 请求超时。
    409 由于和被请求的资源的当前状态之间存在冲突,请求无法完成。
    410 被请求的资源在服务器上已经不再可用,而且没有任何已知的转发地址。
    410响应的目的主要是帮助网站管理员维护网站,通知用户该资源已经不再可用,并且服务器拥有者希望所有指向这个资源的远端连接也被删除。
    411 服务器拒绝在没有定义 Content-Length 头的情况下接受请求。412 服务器在验证在请求的头字段中给出先决条件时,没能满足其中的一个或多个
    413 服务器拒绝处理当前请求,因为该请求提交的实体数据大小超过了服务器愿意或者能够处理的范围。
    414 请求的URI 长度超过了服务器能够解释的长度,因此服务器拒绝对该请求提供服务。
    415 对于当前请求的方法和所请求的资源,请求中提交的实体并不是服务器中所支持的格式,因此请求被拒绝。
    416 如果请求中包含了 Range 请求头,并且 Range 中指定的任何数据范围都与当前资源的可用范围不重合,同时请求中又没有定义 If-Range 请求头,那么服务器就应当返回416状态码
    417 在请求头 Expect 中指定的预期内容无法被服务器满足,或者这个服务器是一个代理服务器,它有明显的证据证明在当前路由的下一个节点上,Expect 的内容无法被满足。
    421 从当前客户端所在的IP地址到服务器的连接数超过了服务器许可的最大范围。
    422 从当前客户端所在的IP地址到服务器的连接数超过了服务器许可的最大范围。
    422 请求格式正确,但是由于含有语义错误,无法响应。
    424 由于之前的某个请求发生的错误,导致当前请求失败,
    425 在WebDav Advanced Collections 草案中定义,但是未出现在《WebDAV 顺序集协议》(RFC 3658)中。
    426 客户端应当切换到TLS/1.0。
    449 由微软扩展,代表请求应当在执行完适当的操作后进行重试。
    500 服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。
    501 服务器不支持当前请求所需要的某个功能。当服务器无法识别请求的方法,并且无法支持其对任何资源的请求。
    502 作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。
    503 由于临时的服务器维护或者过载,服务器当前无法处理请求。这个状况是临时的,并且将在一段时间以后恢复。
    504 作为网关或者代理工作的服务器尝试执行请求时,未能及时从上游服务器或者辅助服务器收到响应。
    505 服务器不支持,或者拒绝支持在请求中使用的 HTTP 版本
    506 由《透明内容协商协议》(RFC 2295)扩展,代表服务器存在内部配置错误:被请求的协商变元资源被配置为在透明内容协商中使用自己,因此在一个协商处理中不是一个合适的重点。
    507 服务器无法存储完成请求所必须的内容。
    509 服务器达到带宽限制。
    510 获取资源所需要的策略并没有没满足。
    

    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?

    WSGI(Web Server Gateway Interface,Web 服务器网关接口)则是Python语言中1所定义的Web服务器和Web应用程序之间或框架之间的通用接口标准。
    WSGI就是一座桥梁,桥梁的一端称为服务端或网关端,另一端称为应用端或者框架端,WSGI的作用就是在协议之间进行转化。WSGI将Web组件分成了三类:Web 服务器(WSGI Server)、Web中间件(WSGI Middleware)与Web应用程序(WSGI Application)。
    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直接编码,能够像操作对象一样从数据库获取数据。
    

    相关文章

      网友评论

          本文标题:flask面试问题

          本文链接:https://www.haomeiwen.com/subject/hnhhqctx.html