面试Flask需要知道的知识点

1. Flask中正则URL的实现?

@app.route(’’)中URL显示支持string,int,float,path4中类型,隐式支持正则。
第一步:写正则类,继承BaseConverter,将匹配到的值设置为regex的值。

class RegexURL(BaseCOnverter):
	def __init__(self,url_map,*args):
		super(RegexUrl,self).__init__(url_map)
		self.regex = args[0]

第二步:把正则类赋值给我们定义的正则规则。

app.url_map.converters['re']=RegexUrl

第三步:在URL中使用正则。

@app.route('/regex/<re(*[a-z]{3}*):id>')
def regex111(id):
	return 'id:%s'%id

2. Flask 中请求上下文和应用上下文的区别和作用?

current_app , g 是应用上下文。
request,session 是请求上下文。
两者区别:
请求上下文:保存了客户端和服务器交互的数据。
应用上下文:flask 应用程序运行过程中,保存的一些配置信息,比如程序名,数据库连接,应用信息等。
两者作用:
请求上下文:
flask 从客户端收到请求时,要让视图函数能访问一些对象,这样才能处理请求。请求对象是一个很好地例子他封装了客户端发送的HTTP请求。要想让视图函数能够访问请求对象,一个显而易见的方式是将其作为参数传入视图函数,不过这会导致程序中的每个视图函数都增加一个参数,除了访问请求对象,如果视图函数在处理请求时还要访问其他对象,情况会变得更糟,为了避免大量可有可无的参数把视图函数弄得一团糟,Flask 使用 上下文临时把某些对象变为全局可访问。
应用上下文:
他的字面意思是 应用上下文,但他不是一直存在的, 他只是 request context 中的一个对APP的代理,所谓local proxy。他的作用主要是帮助 request 获取当前的应用,他是伴request 而生,随request而灭的。

3. Flask 中数据库设置?

1. app.config['SQLALCHEMY_DATABASE_URL'] = 'mysql://root:mysql@127.0.0.1:3306/test'

动态追踪修改设置,如未设置只会提示警告
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True

查询时会显示原始SQL语句
app.config['SQLALCHEMY_ECHO'] = True

4. 常用的SQLAlchemy查询过滤器?

filter() 把过滤器添加到原查询上,返回一个新查询。
filter_by() 把等值过滤器添加到原查询上,返回一个新查询。
limit()  使用指定的值限定原查询返回的结果
offset() 偏移原查询返回的结果,返回一个新查询。
order_by() 根据指定条件对原查询结果进行排序,返回一个新查询
group_by() 根据指定条件对原查询结果进行分组,返回一个新查询。

5. 对Flask蓝图的理解

蓝图的定义

蓝图 /Blueprint 是flask 应用程序组件化的方法,可以在一 个应用内或多个项目公用蓝图。使用蓝图可以极大地简化大型应用的开发难度,也为Flask 扩展提供了一种在应用中注册服务的集中式机制

蓝图的应用场景

  1. 把一个应用分解为一个蓝图的集合。这对大型应用是理想的。一个项目可以实例化一个应用对象,初始化几个扩展,并注册到一个集合的蓝图。
  2. 以URL前缀/子域名,在应用上注册一个蓝图。URL 前缀/子域名中的参数即成为这个蓝图下的所有视图函数的共同的视图参数。
  3. 在一个应用中用不同的URL规则多次注册一个蓝图。
  4. 通过蓝图提供模板过滤器,静态文件,模板和其他功能。一个蓝图不一定要实现应用或者视图函数。
  5. 初始化一个Flask扩展式,在这些情况中注册一个蓝图。

蓝图的缺点
不能再应用创建后撤销注册一个蓝图而不销毁整个应用对象。

使用蓝图的三个步骤

  1. 创建一个蓝图对象
bule = Blueprint('blue',__name__)
  1. 在这个蓝图对象上进行操作,例如注册路由,指定静态文件夹,注册模板过滤器。
@blue。route("blue",__name__)
def blue_index():
	return "Welcome to my blueprint"
  1. 在应用对象上注册这个蓝图对象
app.register_blueprint(blue,url_prefix='/blue')

6. Flask 中WTF表单数据验证?

在flask中,为了处理web表单,我们一般使用FLask-WTF扩展,它封装了WTFForms,并且它有验证表单数据的功能。
使用 Flask-WTF需要配置参数SECRET_KEY.
CSRF_ENABLED 是为了CSRF保护,SECRET_KEY 用来生成加密令牌,当CSRF激活的时候,该设置会根据社会的秘钥生成加密令牌。

7. Flask项目中如何实现session信息的写入?

Flask 中有三个 session:
第一个:数据库中的session,例如db.session.add()
第二个:在flask_session扩展中的session,使用from flask_session import Session ,使用第三方扩展的session可以把信息存储在服务器中,客户端浏览器中只存储sessionid。
第三个:flask 自带的session,是一个请求上下文,使用from flask import session。 自带的session 把信息加密后都存储在客户端的浏览器cookie中。

8. 项目接口实现后路由访问不到怎么办?

可以通过postman 测试工具测试,或者看log日志信息找到错误信息的大概位置

9. Flask 中url_for 函数?

  1. URL反转:根据视图函数名称得到当前所执行的url
  2. url_for():函数最简单的用法是以视图函数名作为参数,返回对应的url,还可以用作加载静态文件。
  3. url_for 和redirect区别
    url_for 是用来拼接 url的,可以使用程序URL映射中保存的信息生成URL。url_for()函数最简单的用法是以师团混熟名作为参数,返回对应的url。
    redirect 是重定向函数,输入一个url后自动跳转到另一个URL所在的地址。

10. Flask中请求钩子的理解和应用?

  1. before_first_request 在处理第一个请求前运行
  2. before_request 在每次请求前运行
  3. after_request 如果没有未处理的异常抛出,在每次请求后运行
  4. teardown_request即使有未处理的异常抛出,在每次请求后运行

11. Flask和Django路由映射的区别?

在django中,路由是浏览器访问服务器时,先访问的项目中的url,再由项目中的url找到应用中url,这些url是放在一个列表里,遵从从前往后匹配的规则。在flask中,路由是通过装饰器给每个视图函数提供的,而且根据请求方式的不同可以一个url用于不同的作用。

12. Flask(__name)中的__name__可以传入那些值?

可以传入的参数:

  1. 字符串:‘hello‘,但是‘abc’不行,因为abc是python内置的模块
  2. name, 约定俗称

不可以插入的参数。

  1. python内置的模块,re,urllib,abc 等
  2. 数字

13. 跨站请求伪造和跨站请求保护的实现?

  1. 一开始用户打开浏览器,访问受信任网站A,输入用户名和密码登录请求登录网站A。
  2. 网站A验证用户信息,用户信息通过验证后,网站A产生Cookie信息并返回给浏览器。
  3. 用户登录网站A成功后,可以正常请求网站A。
  4. 用户未退出网站A之前,在同一浏览器中,打开一个TAB访问网站B
  5. 网站B看到有人方式后,他会返回一下攻击代码。
  6. 浏览器在接受这些攻击性代码后,促使用户不知情的情况下浏览器携带cookie(包括sessionid)信息,请求网站A。这种请求有可能更新密码,添加用户什么操作。

从上面CSRF攻击原理可以看出,要完成一次CSRF攻击,需要被攻击者完成两个步骤:
登录受信任网站A,并在本地生成COOKIE
在不登出A的情况下,访问危险网站B
如果不满足以上两个条件中的一个, 就不会受到CSRF的攻击,以下情况可能会导致CSRF

  1. 登录了一个网址后,打开一个tab页面并访问另外的网站。
  2. 关闭浏览器了后,本地的cookie尚未过期,你上次的会话还没有结束。
    解决办法:就是在表单中添加from.csrf_token.
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Jango是一种高级的Web开发框架,而Flask是一种轻量级的Web开发框架。他们都是基于Python语言开发的,用于构建Web应用程序。 Jango是一个全功能的框架,提供了许多内置的功能和组件,如认证系统、模板引擎、表单处理和数据库集成等。它遵循了“DRY(Don't Repeat Yourself)”的原则,通过提供一套标准化的开发方法,帮助开发者快速构建高质量的Web应用。另外,Django还拥有丰富的社区和生态系统,可以轻松地找到许多开源的插件和扩展。 Flask则是一个轻量级的框架,它提供了基本的功能和组件,如路由、模板引擎和会话管理等。相比Django,Flask更加简洁和灵活,开发者可以根据自己的需求进行模块的选择和组合。Flask的设计理念是“最小的核心,最大的自由”,它注重简洁和可定制性,使得开发过程更加轻松和高效。 在面试中,可能会问到两个框架的区别和适用场景。我们可以根据项目的需求和规模来选择合适的框架。如果需要构建大型复杂的Web应用程序,或者需要使用内置的功能和组件,那么选择Django是一个不错的选择。如果项目要求轻量级、快速开发或者需要更多的自定义需求,那么选择Flask会更加合适。 总的来说,Django和Flask是两个不同的Web开发框架,每个都有自己的优势和适用场景。在面试中,了解和理解这两个框架的特点和区别,可以更好地回答相关问题,并展示自己的技术理解和选择能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值