关于Django、Flask的一些面试知识点

Django

1.Django、 Flask、Tornado框架的比较?

Django:

对于Django,大而全的框架它的内部组件比较多,内部提供:ORM、Admin、中间件、Form、ModelForm、Session、缓存、信号、CSRF;功能也都挺完善的

Flask :

flask,微型框架,内部组件就比较少了,但是有很多第三方组件来扩展它,比如说有那个wtform(与django的modelform类似,表单验证)、flask-sqlalchemy(操作数据库的)、flask-session、flask-migrate、flask-script、blinker可扩展强,第三方组件丰富。所以对他本身来说有那种短小精悍的感觉

Tornado:

是一个轻量级的Web框架,异步非阻塞+内置WebSocket功能。

'目标':通过一个线程处理N个并发请求(处理IO)。

内部组件:
  a.内部自己实现socket
  b.路由系统
  c.视图
  d.模板
  e.cookie
  f.csrf

共同点:

Django和Flask的共同点就是,他们2个框架都没有写socket,所以他们都是利用第三方模块wsgi;而Tornado自带socket组件。

不同点:

但是内部使用的wsgi也是有些不同的:Django本身运行起来使用wsgiref,而Flask使用werkzeug wsgi,还有一个区别就是他们的请求管理不太一样:django是通过将请求封装成request对象,再通过参数传递,而flask是通过上下文管理机制

2. Django请求的生命周期?

用户请求进来先走到 wsgi,然后将请求交给 Django的中间件,穿过中间件(方法是process_request),接着就是路由匹配,路由匹配成功之后就执行相应的视图函数,在视图函数中可以调用orm做数据库操作,再从模板路径将模板拿到,然后在后台进行模板渲染,模板渲染完成之后就变成一个字符串,再把这个字符串经过所有中间件(方法:process_response)和wsgi 返回给用户

3.列举Django的内置组件?

form组件:

- 对用户请求的数据进行校验
- 生成HTML标签

PS:

- form对象是一个可迭代对象。
- 问题:choice的数据如果从数据库获取可能会造成数据无法实时更新
- 重写构造方法,在构造方法中重新去数据库获取值。
- ModelChoiceField字段

信号:

Django的信号其实就是Django内部为开发者预留的一些自定制功能的钩子。只要在某个信号中注册了函数,那么Django内部执行的过程中就会自动触发注册在信号中的函数。

场景:
在数据库某些表中添加数据时,可以进行日志记录。

CSRF(跨站点请求伪造):

目标:防止用户直接向服务端发起POST请求。

它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。

对所有的post请求做验证/ 将Django生成的一串字符串发送给客户端,一种是从请求体发过来,一种是放在隐藏的标签里面用的是process_view

方案:先发送GET请求时,将token保存到:cookie

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值