Django认识|面试题(1)

  • django的认识
  1. django是走大而全的方向,只需要使用其ORM起,做简单的对象定义,它就能自动生成数据表结构、以及全功能的管理后台
  2. django内置的ORM跟框架的其他模块耦合程度高。程序最好使用内置的ORM,否则不能享受到框架内提供的种种基于ORM的便利;理论上可以切换其ORM。
  3. django的优点是其极高的开发效率,但其性能扩展有限;在项目流量达到一定规模后,都需要进行重构,才能满足性能的要求。
  4. django的设计基本是将代码和样式分离,从根本上不在模板中进行编码、处理数据的可能

ORM:对象关系映射,在具体的操作数据库的时候,不需要向复杂的SQL语句打交道,只需要像平时操作对象一样操作。


  • django、flask、tornado对比
  1. django走的是大而全的方向,开发效率高。自带MTV框架、ORM、admin后台管理,自带的sqlite数据库和开发测试用的服务器。
  2. flask是轻量级的框架,自由,灵活,可扩展性很强
  3. tornado走的是少而精的方向,性能优越。最出名的是异步非阻塞的设计方式

  • 什么是wsgi、uwsgi、uWSGI
  1. wsgi是一套协议,用于接收用户请求并将请求进行初步封装交给web框架(django实现wsgi的是wsgiref模块,本质上是一个socket服务端,用于接收用户请求)
  2. uswgi是一种通信协议,它是uWSGI服务器的独占协议,用于定义传输信息的类型
  3. uWSGI是一个web服务器,实现wsgi、uwsgi、http协议

  • django请求的生命周期
  1. wsgi将请求交给web框架
  2. 中间件,对请求进行校验,或在请求对象中添加其他相关数据,例如:csrf、request、session
  3. 路由匹配 根据浏览器发送的不同url去匹配不同的视图函数
  4. 视图函数 在视图函数中进行业务逻辑的处理,可能是及到:orm templates->渲染
  5. 中间件,对响应的数据进行处理
  6. wsgi,将响应的内容发送给浏览器

  • 简述什么是FBV和CBV
  1. FBV((function base views))在视图里使用函数处理请求,CBV(class base views)在视图里使用类处理请求
  2. CBV优点:提高代码的复用性,可以使用面向对象的技术比如Mixin(多继承);可以用不同的函数针对不同的HTTP方法请求,而不是通过很多if判断,提高代码可读性

  • 简述MVC和MTV
  1. MVC分为model view controller;model负责业务对象与数据库的映射,view负责与用户的交互,conntrol接收用户的输入调用模型和视图完成用户的请求;
  2. MTV分为model template view;model负责业务对象与数据库对象,view负责业务逻辑适当时候调用model和template,template负责如何把页面展示给用户

  • django路由系统中的name的作用
    1.用于反向解析路由,相当于给url取别名,只要这个名字不变,即使对应的url改变通过该名字也能找到该条url

  • 列举django内置组件
  1. Admin是对model中对应的数据库进行增删改查提供的组件
  2. model组件负责操作数据库
  3. form组件:生成html代码,数据有效性检验,检验信息返回并展示
  4. modelForm用于数据库操作,也可用于用户请求验证

  • MIDDLEWARES中间件的作用和应用场景?
  1. 中间介是位于request和response处理之间的一道处理过程,用于在全局范围内改变django的输入和输出->帮助我们在视图函数执行之前和执行之后做一些额外的操作
  2. django默认开启csrf保护,每次请求通过csrf保护,通过模板标签csrf_token向POST表单添加一个隐藏的表单字段,并且在每次请求时通过CSRF中间介检查请求中是否有正确的值,提供对跨站请求伪造简单易用的防护。

跨站请求攻击:某个恶意的网站上有一个指向你的网站的链接,如果某个用户已经登录到你的网站上了,那么当这个用户点击这个恶意网站上的那个链接时,就会向你的网站发来一个请求,你的网站会以为这个请求是用户自己发来的,其实呢,这个请求是那个恶意网站伪造。在前端加入{% csrf_token %}就可以实现通过csrf校验

  1. 用户认证系统,它们在每个请求上提供给一个request.user属性,把user对象加入到request党章,表示当前的用户。从request中可以获取到user信息

  • csrf的实现机制
  1. django第一次响应来自某个客户端的请求时,后端随机产生一个token值,把token保存在session中;同时后端这个token放到cookie中交给前端页面
  2. 下次前端需要发起请求时候把这个token值加入到请求数据或头信息中,一起传给后端
  3. 后端检验前端请求带过来的token和session里的token是否一致
  • 基于ajax发送post请求时,都可以使用哪种方法携带csrf_token
1. 后端将csrftoken传到前端,发送post请求时携带这个值发送
data: {
             csrfmiddlewaretoken: '{{ csrf_token }}'
        },
2. 获取form中隐藏标签的csrftoken值,加入到请求数据中传给后端
 data: {
         csrfmiddlewaretoken:$('[name="csrfmiddlewaretoken"]').val()
         },
3. cookie中存在csrftoken,将csrftoken值放到请求头中
headers:{ "X-CSRFtoken":$.cookie("csrftoken")},

  • Django本身提供runserver,为什么不能用来部署(uWSGI和runserver区别)
  1. runserver是调试,django经常使用的运行方式,它使用django自带的wsgi运行,主要在测试和开发中使用,并且runserver开启的方式是单进程
  2. uWsgi是一个web服务器它实现了WSGI协议、uwsgi、http 等协议。注意uwsgi是一种通信协议,而uWSGI是实现uwsgi协议和WSGI协议的 Web 服务器。
  3. uWSGI具有超快的性能、低内存占用和多app管理等优点,并且搭配着Nginx就是一个生产环境了,能够将用户访问请求与应用 app隔离开,实现真正的部署 。支持的并发量更高,方便管理多进程,发挥多核的优势,提升性能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值