实验8、31个最重要的Python Flask面试问题和答案

实验介绍

1. 实验内容

内容涵盖了31个最热门的Flask面试问题,帮助学生更好的理解Flask。

2. 实验要点

  • 了解面试Flask开发人员的常见问题

实验内容

Flask面试问答

  1. Q:Flask是什么?

    A:Flask是一个用Python语言创建的web开发框架。该框架基于Jinja2模板引擎和Werkzeug综合的WSGI web应用程序库的健壮基础。
    Flask是由Armin Ronacher创建的,是Pallets项目的一部分,它是一个Python web开发库的集合,如Flask, Click, ItsDangerous, Jinja, MarkupSafe和Werkzeug。

  2. Q:Flask是否开源?

    A:Flask框架是开源的。Flask框架的源代码可以在GitHub上找到。它是在BSD-3条款许可下发布的。

  3. Q:如何获得Flask框架的开发版本?

    A:可以使用git获得Flask框架的开发版本。

    git clone https://github.com/pallets/flask
    cd flask && python3 setup.py develop
    
  4. Q:如何在Flask应用程序中添加邮件功能?

    A:要发送电子邮件,我们需要使用下面给出的命令安装flask - mail扩展模块。

    pip install Flask-Mail
    
    from flask_mail import Mail, Message
    from flask import Flask
    
    app = Flask(__name__)
    mail = Mail(app)
    
    @app.route(“/mail”)
    def email():
    		msg = Message( “Hello Message”, sender=”admin@test.com”, recipients=[“to@test.com”])
    	 mail.send(msg)
    

一旦安装完毕,我们就需要使用Flask Config API来配置邮件服务器、MAIL_PORT、MAIL_USERNAME、MAIL_PASSWORD等等。然后,我们需要导入Message类,实例化它,并在使用mail.send()方法发送电子邮件之前形成一个Message对象。

  1. Q:WSGI是什么?

    A:WSGI相当于Web服务器网关接口。它是在PEP 3333中定义的Python标准。WSGI的发音是“whiskey”。它是一个描述web服务器如何与web应用程序通信的规范。

  2. Q:谁创建的Flask?

    A:Armin Ronacher创造了烧瓶框架。Flask是在2011年愚人节的一个玩笑中诞生的。

  3. Q:为什么我们要选择Flask?

    A:Flask用于使用Python编程语言创建Web应用程序。Flask是一个微框架,也用于快速构建基于web和网络的应用程序原型。

  4. Q:如何在Linux系统下安装Flask?

    A:在Linux中,可以使用Python的包管理器pip安装Flask。

    pip install Flask
    
  5. Q:Flask默认的主机地址和端口是什么?

    A:Flask的默认地址为localhost(127.0.0.1),默认端口号5000

  6. Q:如何改变Flask的默认地址和端口?

    A:在应用程序上调用run方法时,可以通过将修改的值传递给主机和端口参数来更改Flask的默认主机和端口。

    from flask import Flask
    app = Flask(__name__)
    
    @app.route("/")
    def index():
    		return "Hello, World!"
    
    if __name__ == "__main__":
    		app.run(host="0.0.0.0", port=8080)
    
  7. Q:那部分Flask扩展可以用来创建Ajax应用程序?

    A:我们可以使用Flask-Sijax来创建Ajax应用程序。Flask-Sijax是一个使用Python/JQuery的扩展。它可以在PyPI上使用,并且可以使用pip安装。
    Sijax代表简单Ajax。一旦配置和初始化,它就支持使用@flask_sijax装饰器,我们可以使用它来让Ajax意识到Flask应用程序中的视图。

  8. Q:如何使用Flask命令?

    A:由于安装了Flask,我们还可以访问一个名为Flask的命令行应用程序。我们可以使用各种各样的命令。
    在命令行上使用Flask -help查看所有选项。缺省的命令有routes、run和shell。这个程序提供来自Flask、extensions和应用程序的命令。

  9. Q:如何在Flask获得请求参数?

    A:我们可以使用Flask中的request对象来获取参数的值。

    from flask import Flask
    from flask import request
    
    app = Flask(__name__)
    
    @app.route("/")
    def index():
    val = request.args.get("var") 
    
    return "Hello, World! {}".format(val)
    
    if __name__=="__main__":
    app.run(host="0.0.0.0", port=8080)
    
  10. 如何在Flask中获得用户代理?

    A:我们可以使用request对象在Flask中获取用户代理。

    from flask import Flask
    from flask import request
    
    app = Flask(__name__)
    
    @app.route("/")
    def index():
    		val = request.args.get("var")
    		user_agent = request.headers.get('User-Agent')   
    
    		response = """
    		<p>
    		Hello, World! {}
    		<br/>
    		You are accessing this app with {}
    		</p>
    		""".format(val, user_agent)    
    return response
    if __name__=="__main__":
    		app.run(host="0.0.0.0", port=8080)
    

![img](C:\Users\YunHai\Desktop\Flask课程资源\新建文件夹\img\实验8、31个最重要的Python Flask面试问题和答案\1488ll1610461431.png)

  1. Q:在Flask应用程序中如何使用url_for()函数?

    A:Flask的url_for()函数帮助创建动态路由。我们可以在Flask模板中使用url_for()。我们可以调用带有参数和值的视图函数来生成url。

<a href=”{{ url_for(‘get_post_id’, post_id=post.id}}”>{{post.title}}

@app.route(“/blog/post/<string:post_id>”)
def get_post_id(post_id):
return post_id
```
  1. Q:如何在Flask创建管理界面?

    A:我们可以使用Flask-Admin扩展在Flask中创建一个管理界面。它有助于将各个视图分组在一起。我们也可以使用Flask-Appbuilder扩展。Flask-Appbuilder已经自带管理界面。

  2. Q:如何将Twitter或类似API与Flask应用程序集成?

    A:为了与Flask集成,我们可以使用Flask-Social的Flask扩展。它不仅有助于验证Twitter用户的身份,而且还有助于验证其他社交平台或帐户(如Facebook和Google)的身份。我们需要同时使用Flask-Social和Flask-Security。我们需要在Python中安装单个API库,还需要通过在外部帐户提供商上注册Flask应用程序来获取使用者密钥和安全密钥。

  3. Q:为什么Flask被称为微框架?

    A:Flask之所以称为微框架,是因为Flask仅提供核心功能,例如请求,路由和Blueprint。对于其他功能,例如缓存,ORM,表单等,我们需要使用Flask-Extensions。

  4. Q:使用Flask框架有什么好处?

    A:使用Flask框架的一些好处是:
    - 它具有内置的开发服务器。
    - 它具有大量的第三方扩展。
    - 它具有一个很小的API,并且可以由Web开发人员快速学习。
    - 它符合WSGI。
    - 它支持Unicode。

  5. Q:SQLite数据库是否内置Flask?

    A:SQLite是Python内置的。要在Flask中使用数据库,我们不需要安装任何其他的Flask-Extension。在视图内部,我们可以导入SQLite并编写SQL查询以与数据库进行交互。但是,Flask开发人员通常使用Flask-SQLAlchemy,它消除了编写复杂SQL查询的需要,并且支持与SQLite数据库进行交互的ORM。

  6. Q:Flask框架中的模板引擎是什么意思?

    A:模板是一个包含两种类型的数据的文件,即静态和动态。在运行期间填充模板中的动态数据。Flask利用Jinja2模板引擎,使开发人员可以使用带有占位符的HTML模板来创建动态数据。通过使用Flask的render_template方法以及所需的参数和值,可以在运行时填充这些占位符。

  7. Q:Flask中的Thread本地对象是什么意思?

    A:在Flask中,开箱即用提供了线程安全性。我们可以使用诸如current_app,g和request之类的对象,而不必担心与锁定和并发有关的问题。而且,我们不需要将对象从方法传递到方法,并且这些对象通常在有效的请求上下文中可用。Flask的此属性使其具有一些独特性,并在保持Flask应用程序线程安全的同时为Flask开发人员提供了很多便利。

  8. Q:Django和Flask有什么区别?为什么要选择Flask?

    A: Django还是一个使用Python编程语言创建的Web开发框架。它是功能齐全的Web应用程序框架,具有许多内置功能,例如Admin后端和具有迁移功能的ORM。它创建时间早,更成熟。Flask适用于快速开发用例,是原型制作的完美选择。Django甚至启发了一些已编写的Flask扩展。Flask更适合开发不需要大型代码库的轻量级Web应用程序。它易于开发微服务或无服务器应用程序。与Django相比,Flask简单易学且API更少。随着行业追随将微服务作为容器的一部分的趋势,将Flask保留在您的Web开发工具包中很实用。

  9. Q:简单介绍Flask的Forms扩展的功能。

    A: Flask中的表单可以通过使用名为Flask-WTF的扩展来实现。Flask-WTF是通过将Flask与WTForms集成而创建的。WTForms是基于python的表单呈现和验证库。它支持数据验证,国际化和CSRF保护。当与Flask-Upload绑定时,Flask-WTF还提供reCAPTCHA支持以及文件上传。您还可以处理JavaScript请求,并自定义错误响应。

  10. Q:如何在Flask中使用session?

    A:每当我们想要在请求之间保存一些数据时,我们就会在Flask中使用session对象。我们可以设置并从session对象获取数据,如下所示。

    fromflask import Flask, session
    
    app = Flask(__name__)
    
    @app.route('/use_session')
    def use_session()
    	if 'song' not in session:
    			session['songs'] = {'title': 'Tapestry', 'singer': 'Bruno Major'}
    
    	return session.get('songs')
    
    @app.route('/delete_session')
    def delete_session()
    	session.pop('song', None)
    	return "removed song from session"
    
  11. Q:Flask中的g对象是什么?它与会话对象有何不同?

    A:Flask的g对象用作全局命名空间,用于在应用程序上下文中保存任何数据。g对象不适用于在请求之间存储数据。从某种意义上说,字母g代表global。在某些情况下,当您需要在应用程序上下文中保留全局变量,而不是创建全局变量时,最好使用g对象,因为Flask中的每个请求都有一个单独的g对象。Flask的g对象使我们免于意外修改自定义全局变量。

  12. Q:Flask中的应用程序上下文是什么?

    A:Flask中的应用程序上下文与完整的请求/响应周期有关。它在请求或CLI命令期间跟踪应用程序级数据。我们使用g和current_app代理来实现相同的目的。在某些情况下,例如Flask扩展或“Blueprint”很难直接导入Flask app。而且,直接import可能会引起循环import的问题。Flask随每个请求推送应用程序上下文。因此,在请求期间,自定义函数可以调用g和current_app来克服上述问题。

  13. Q:您可以通过哪些方式连接Flask中的数据库?

    A:Flask可用于大多数RDBMS,例如PostgreSQL,SQLite和MySQL。但是,要连接数据库,我们必须使用Flask-SQLAlchemy扩展。它使开发过程中的数据库交互和管理变得容易,而无需编写原始SQL查询。此外,原始SQL查询容易受到SQL注入攻击。对于使用NoSQL数据存储(例如MongoDB),我们可以使用Flask-MongoEngine扩展。

  14. Q:如何在Flask中创建一个RESTful应用程序?

    A:可以在Flask中借助许多扩展来创建RESTful应用程序。
    1. FLask-API
    2. FLask-RESTful
    3. Flask-RESTX
    4. Connexion
    我们需要根据自身的项目需要在其中进行评估和选择。

  15. Q:如何调试Flask应用程序?

    A:Flask附带有开发服务器,而开发服务器具有调试模式。当我们调用Flask Application对象的run方法时,可以将Debug模式设置为true。

    from flask import Flask 
    app = Flask(__name__)
    app.run(host='127.0.0.1', debug=True)
    

    但是,我们需要在将应用程序部署到生产环境之前禁用调试模式,以避免在浏览器中完整显示堆栈跟踪。这样的堆栈跟踪可以揭示很多基本细节,并且容易被不良行为者利用。此外,我们可以利用Flask-DebugToolbar扩展名在浏览器中轻松调试。我们还可以利用Python的pdb模块和调试语句import pdb; pdb.set_trace()来支持调试过程。

  16. Q:我们可以使用Flask创建哪种类型的应用程序?

    A:使用Flask,我们可以创建几乎所有类型的Web应用程序。我们可以创建单页应用程序,基于RESTful API的应用程序,SAS应用程序,中小型网站,静态网站,微服务和无服务器应用程序。Flask用途广泛且灵活,可以快速与其他技术集成以达到相同目的。例如, Flask可与NodeJS Serverless,AWS lambda和类似的其他第三方服务结合使用,以构建新时代的系统。

实验总结

在本教程中,我们介绍了与Flask面试有关的问题,这些问题在参加面试时经常被提及。这些问题可能以不同的形式出现。建议学生多做一些思考,并对Flask的源码项目理解和做出贡献,提高他们的开发人员体验。

总体而言,Flask框架轻巧灵活。使用Flask学习开发非常容易。此外,Flask遵循Web应用程序开发的现代方法。它还具有广泛的社区支持,以更好地解决问题,并支持开源。

posted @ 2021-05-12 23:06  liuyang9643  阅读(1448)  评论(0编辑  收藏  举报