实验8、31个最重要的Python Flask面试问题和答案
实验介绍
1. 实验内容
内容涵盖了31个最热门的Flask面试问题,帮助学生更好的理解Flask。
2. 实验要点
- 了解面试Flask开发人员的常见问题
实验内容
Flask面试问答
-
Q:Flask是什么?
A:Flask是一个用Python语言创建的web开发框架。该框架基于Jinja2模板引擎和Werkzeug综合的WSGI web应用程序库的健壮基础。
Flask是由Armin Ronacher创建的,是Pallets项目的一部分,它是一个Python web开发库的集合,如Flask, Click, ItsDangerous, Jinja, MarkupSafe和Werkzeug。 -
Q:Flask是否开源?
A:Flask框架是开源的。Flask框架的源代码可以在GitHub上找到。它是在BSD-3条款许可下发布的。
-
Q:如何获得Flask框架的开发版本?
A:可以使用git获得Flask框架的开发版本。
git clone https://github.com/pallets/flask cd flask && python3 setup.py develop
-
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对象。
-
Q:WSGI是什么?
A:WSGI相当于Web服务器网关接口。它是在
PEP 3333
中定义的Python标准。WSGI的发音是“whiskey”。它是一个描述web服务器如何与web应用程序通信的规范。 -
Q:谁创建的Flask?
A:Armin Ronacher创造了烧瓶框架。Flask是在2011年愚人节的一个玩笑中诞生的。
-
Q:为什么我们要选择Flask?
A:Flask用于使用Python编程语言创建Web应用程序。Flask是一个微框架,也用于快速构建基于web和网络的应用程序原型。
-
Q:如何在Linux系统下安装Flask?
A:在Linux中,可以使用Python的包管理器pip安装Flask。
pip install Flask
-
Q:Flask默认的主机地址和端口是什么?
A:Flask的默认地址为
localhost(127.0.0.1)
,默认端口号5000
-
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)
-
Q:那部分Flask扩展可以用来创建Ajax应用程序?
A:我们可以使用Flask-Sijax来创建Ajax应用程序。Flask-Sijax是一个使用Python/JQuery的扩展。它可以在PyPI上使用,并且可以使用pip安装。
Sijax代表简单Ajax。一旦配置和初始化,它就支持使用@flask_sijax装饰器,我们可以使用它来让Ajax意识到Flask应用程序中的视图。 -
Q:如何使用Flask命令?
A:由于安装了Flask,我们还可以访问一个名为Flask的命令行应用程序。我们可以使用各种各样的命令。
在命令行上使用Flask -help查看所有选项。缺省的命令有routes、run和shell。这个程序提供来自Flask、extensions和应用程序的命令。 -
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)
-
如何在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)
-
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
```
-
Q:如何在Flask创建管理界面?
A:我们可以使用Flask-Admin扩展在Flask中创建一个管理界面。它有助于将各个视图分组在一起。我们也可以使用Flask-Appbuilder扩展。Flask-Appbuilder已经自带管理界面。
-
Q:如何将Twitter或类似API与Flask应用程序集成?
A:为了与Flask集成,我们可以使用Flask-Social的Flask扩展。它不仅有助于验证Twitter用户的身份,而且还有助于验证其他社交平台或帐户(如Facebook和Google)的身份。我们需要同时使用Flask-Social和Flask-Security。我们需要在Python中安装单个API库,还需要通过在外部帐户提供商上注册Flask应用程序来获取使用者密钥和安全密钥。
-
Q:为什么Flask被称为微框架?
A:Flask之所以称为微框架,是因为Flask仅提供核心功能,例如请求,路由和Blueprint。对于其他功能,例如缓存,ORM,表单等,我们需要使用Flask-Extensions。
-
Q:使用Flask框架有什么好处?
A:使用Flask框架的一些好处是:
- 它具有内置的开发服务器。
- 它具有大量的第三方扩展。
- 它具有一个很小的API,并且可以由Web开发人员快速学习。
- 它符合WSGI。
- 它支持Unicode。 -
Q:SQLite数据库是否内置Flask?
A:SQLite是Python内置的。要在Flask中使用数据库,我们不需要安装任何其他的Flask-Extension。在视图内部,我们可以导入SQLite并编写SQL查询以与数据库进行交互。但是,Flask开发人员通常使用Flask-SQLAlchemy,它消除了编写复杂SQL查询的需要,并且支持与SQLite数据库进行交互的ORM。
-
Q:Flask框架中的模板引擎是什么意思?
A:模板是一个包含两种类型的数据的文件,即静态和动态。在运行期间填充模板中的动态数据。Flask利用Jinja2模板引擎,使开发人员可以使用带有占位符的HTML模板来创建动态数据。通过使用Flask的render_template方法以及所需的参数和值,可以在运行时填充这些占位符。
-
Q:Flask中的Thread本地对象是什么意思?
A:在Flask中,开箱即用提供了线程安全性。我们可以使用诸如current_app,g和request之类的对象,而不必担心与锁定和并发有关的问题。而且,我们不需要将对象从方法传递到方法,并且这些对象通常在有效的请求上下文中可用。Flask的此属性使其具有一些独特性,并在保持Flask应用程序线程安全的同时为Flask开发人员提供了很多便利。
-
Q:Django和Flask有什么区别?为什么要选择Flask?
A: Django还是一个使用Python编程语言创建的Web开发框架。它是功能齐全的Web应用程序框架,具有许多内置功能,例如Admin后端和具有迁移功能的ORM。它创建时间早,更成熟。Flask适用于快速开发用例,是原型制作的完美选择。Django甚至启发了一些已编写的Flask扩展。Flask更适合开发不需要大型代码库的轻量级Web应用程序。它易于开发微服务或无服务器应用程序。与Django相比,Flask简单易学且API更少。随着行业追随将微服务作为容器的一部分的趋势,将Flask保留在您的Web开发工具包中很实用。
-
Q:简单介绍Flask的Forms扩展的功能。
A: Flask中的表单可以通过使用名为Flask-WTF的扩展来实现。Flask-WTF是通过将Flask与WTForms集成而创建的。WTForms是基于python的表单呈现和验证库。它支持数据验证,国际化和CSRF保护。当与Flask-Upload绑定时,Flask-WTF还提供reCAPTCHA支持以及文件上传。您还可以处理JavaScript请求,并自定义错误响应。
-
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"
-
Q:Flask中的g对象是什么?它与会话对象有何不同?
A:Flask的g对象用作全局命名空间,用于在应用程序上下文中保存任何数据。g对象不适用于在请求之间存储数据。从某种意义上说,字母g代表global。在某些情况下,当您需要在应用程序上下文中保留全局变量,而不是创建全局变量时,最好使用g对象,因为Flask中的每个请求都有一个单独的g对象。Flask的g对象使我们免于意外修改自定义全局变量。
-
Q:Flask中的应用程序上下文是什么?
A:Flask中的应用程序上下文与完整的请求/响应周期有关。它在请求或CLI命令期间跟踪应用程序级数据。我们使用g和current_app代理来实现相同的目的。在某些情况下,例如Flask扩展或“Blueprint”很难直接导入Flask app。而且,直接import可能会引起循环import的问题。Flask随每个请求推送应用程序上下文。因此,在请求期间,自定义函数可以调用g和current_app来克服上述问题。
-
Q:您可以通过哪些方式连接Flask中的数据库?
A:Flask可用于大多数RDBMS,例如PostgreSQL,SQLite和MySQL。但是,要连接数据库,我们必须使用Flask-SQLAlchemy扩展。它使开发过程中的数据库交互和管理变得容易,而无需编写原始SQL查询。此外,原始SQL查询容易受到SQL注入攻击。对于使用NoSQL数据存储(例如MongoDB),我们可以使用Flask-MongoEngine扩展。
-
Q:如何在Flask中创建一个RESTful应用程序?
A:可以在Flask中借助许多扩展来创建RESTful应用程序。
1. FLask-API
2. FLask-RESTful
3. Flask-RESTX
4. Connexion
我们需要根据自身的项目需要在其中进行评估和选择。 -
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()
来支持调试过程。 -
Q:我们可以使用Flask创建哪种类型的应用程序?
A:使用Flask,我们可以创建几乎所有类型的Web应用程序。我们可以创建单页应用程序,基于RESTful API的应用程序,SAS应用程序,中小型网站,静态网站,微服务和无服务器应用程序。Flask用途广泛且灵活,可以快速与其他技术集成以达到相同目的。例如, Flask可与NodeJS Serverless,AWS lambda和类似的其他第三方服务结合使用,以构建新时代的系统。
实验总结
在本教程中,我们介绍了与Flask面试有关的问题,这些问题在参加面试时经常被提及。这些问题可能以不同的形式出现。建议学生多做一些思考,并对Flask的源码项目理解和做出贡献,提高他们的开发人员体验。
总体而言,Flask框架轻巧灵活。使用Flask学习开发非常容易。此外,Flask遵循Web应用程序开发的现代方法。它还具有广泛的社区支持,以更好地解决问题,并支持开源。