Python之Flask面试题

Posted 编码之外

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python之Flask面试题相关的知识,希望对你有一定的参考价值。

1、如何在Linux系统下安装Flask?

pip install Flask

2、Flask默认的主机地址和端口是什么?

3、如何改变Flask的默认地址和端口?

# 在应用程序上调用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)

4、如何在Flask获得请求参数?

# 我们可以使用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)

5、使用Flask框架有什么好处?

1、 它具有内置的开发服务器。

2、 它具有大量的第三方扩展。

3、 它具有一个很小的API,并且可以由Web开发人员快速学习。

4、 它符合WSGI。

5、 它支持Unicode。

6、SQLite数据库是否内置Flask?

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

7、Flask框架中的模板引擎是什么意思?

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

8、Django和Flask有什么区别?为什么要选择Flask?

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

9、如何在Flask中使用session?

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

from flask import Flask, session
app = Flask(__name__)

@app.route('/use_session')
def use_session()
 if 'songnot 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"

10、Flask中的g对象是什么?它与会话对象有何不同?

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

11、您可以通过哪些方式连接Flask中的数据库?

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

12、 Flask蓝图的作用?

# 蓝图Blueprint实现模块化的应用
book_bp = Blueprint(‘book’, name)创建蓝图对象
                    
# 蓝图中使用路由@book_bp.route(‘url’)
# 在另一.py文件里导入和注册蓝图   
                    
from book import book_bp 
app.register_blueprint(book_bp)
                    
# 作用:
    1、将不同的功能模块化
  2、构建大型应用
  3、优化项目结构
  4、增强可读性,易于维护(跟Django的view功能相似)

13、Flask框架默认session处理机制?

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

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

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

14、Flask-WTF是什么?有什么特点?

# Flask-wtf是一个用于表单处理,校验并提供csrf验证的功能的扩展库
# Flask-wtf能把正表单免受CSRF<跨站请求伪造>的攻击
# Flask-WTF 提供 FileField 来处理文件上传,它在表单提交后,自动从 flask.request.files 中抽取数据。FileField 的 data 属性是一个 Werkzeug 。

15、列举HTTP请求中的状态码?

404 请求的url地址不存在
503 访问限制有权限
200 访问成功
302 重定向

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。服务器遇到错误,无法完成请求。

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

17、列举使用过的Flask第三方组件

werkzurg、DBUtils、wtforms、SQLAlchemy、jinjia2、redis

18、SQLAlchemy如何执行原生SQL

# 两种SQLAlchemy可以执行原生sql的方式,第一种是通过session(会话)对象执行execute方法,第二种是通过cursor(游标)对象执行execute方法。

"""
第一种是:
"""

session = scoped_session(SessionFactory)
session.execute('insert users(name) values(:value)', params={'value''thanlon'})

"""
第二种是:
"""

conn = engine.raw_connection()
cursor = conn.cursor()
cursor.execute('select * from users')

19、DBUtils模块的作用

DBUtils模块的作用是实现数据库连接池,是为了解决“多线程情况下请求比较多时性能降低”的问题。

20、SQLAchemy中如何设置联合唯一索引

# 首先在中间表(关联表)的类中加入__table_args__ 字段,然后实例化UniqueConstraint类并放入一个元组中,最后把这个元组赋值给__table_args__。用代码表示如下:

__table_args__ = (
        UniqueConstraint('student_id''course_id', name='uc_student_course'),  # 联合唯一索引
    )