- django的认识
- django是走大而全的方向,只需要使用其ORM起,做简单的对象定义,它就能自动生成数据表结构、以及全功能的管理后台
- django内置的ORM跟框架的其他模块耦合程度高。程序最好使用内置的ORM,否则不能享受到框架内提供的种种基于ORM的便利;理论上可以切换其ORM。
- django的优点是其极高的开发效率,但其性能扩展有限;在项目流量达到一定规模后,都需要进行重构,才能满足性能的要求。
- django的设计基本是将代码和样式分离,从根本上不在模板中进行编码、处理数据的可能
ORM:对象关系映射,在具体的操作数据库的时候,不需要向复杂的SQL语句打交道,只需要像平时操作对象一样操作。
- django、flask、tornado对比
- django走的是大而全的方向,开发效率高。自带MTV框架、ORM、admin后台管理,自带的sqlite数据库和开发测试用的服务器。
- flask是轻量级的框架,自由,灵活,可扩展性很强
- tornado走的是少而精的方向,性能优越。最出名的是异步非阻塞的设计方式
- 什么是wsgi、uwsgi、uWSGI
- wsgi是一套协议,用于接收用户请求并将请求进行初步封装交给web框架(django实现wsgi的是wsgiref模块,本质上是一个socket服务端,用于接收用户请求)
- uswgi是一种通信协议,它是uWSGI服务器的独占协议,用于定义传输信息的类型
- uWSGI是一个web服务器,实现wsgi、uwsgi、http协议
- django请求的生命周期
- wsgi将请求交给web框架
- 中间件,对请求进行校验,或在请求对象中添加其他相关数据,例如:csrf、request、session
- 路由匹配 根据浏览器发送的不同url去匹配不同的视图函数
- 视图函数 在视图函数中进行业务逻辑的处理,可能是及到:orm templates->渲染
- 中间件,对响应的数据进行处理
- wsgi,将响应的内容发送给浏览器
- 简述什么是FBV和CBV
- FBV((function base views))在视图里使用函数处理请求,CBV(class base views)在视图里使用类处理请求
- CBV优点:提高代码的复用性,可以使用面向对象的技术比如Mixin(多继承);可以用不同的函数针对不同的HTTP方法请求,而不是通过很多if判断,提高代码可读性
- 简述MVC和MTV
- MVC分为model view controller;model负责业务对象与数据库的映射,view负责与用户的交互,conntrol接收用户的输入调用模型和视图完成用户的请求;
- MTV分为model template view;model负责业务对象与数据库对象,view负责业务逻辑适当时候调用model和template,template负责如何把页面展示给用户
- django路由系统中的name的作用
1.用于反向解析路由,相当于给url取别名,只要这个名字不变,即使对应的url改变通过该名字也能找到该条url
- 列举django内置组件
- Admin是对model中对应的数据库进行增删改查提供的组件
- model组件负责操作数据库
- form组件:生成html代码,数据有效性检验,检验信息返回并展示
- modelForm用于数据库操作,也可用于用户请求验证
- MIDDLEWARES中间件的作用和应用场景?
- 中间介是位于request和response处理之间的一道处理过程,用于在全局范围内改变django的输入和输出->帮助我们在视图函数执行之前和执行之后做一些额外的操作
- django默认开启csrf保护,每次请求通过csrf保护,通过模板标签csrf_token向POST表单添加一个隐藏的表单字段,并且在每次请求时通过CSRF中间介检查请求中是否有正确的值,提供对跨站请求伪造简单易用的防护。
跨站请求攻击:某个恶意的网站上有一个指向你的网站的链接,如果某个用户已经登录到你的网站上了,那么当这个用户点击这个恶意网站上的那个链接时,就会向你的网站发来一个请求,你的网站会以为这个请求是用户自己发来的,其实呢,这个请求是那个恶意网站伪造。在前端加入{% csrf_token %}就可以实现通过csrf校验
- 用户认证系统,它们在每个请求上提供给一个request.user属性,把user对象加入到request党章,表示当前的用户。从request中可以获取到user信息
- csrf的实现机制
- django第一次响应来自某个客户端的请求时,后端随机产生一个token值,把token保存在session中;同时后端这个token放到cookie中交给前端页面
- 下次前端需要发起请求时候把这个token值加入到请求数据或头信息中,一起传给后端
- 后端检验前端请求带过来的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区别)
- runserver是调试,django经常使用的运行方式,它使用django自带的wsgi运行,主要在测试和开发中使用,并且runserver开启的方式是单进程
- uWsgi是一个web服务器它实现了WSGI协议、uwsgi、http 等协议。注意uwsgi是一种通信协议,而uWSGI是实现uwsgi协议和WSGI协议的 Web 服务器。
- uWSGI具有超快的性能、低内存占用和多app管理等优点,并且搭配着Nginx就是一个生产环境了,能够将用户访问请求与应用 app隔离开,实现真正的部署 。支持的并发量更高,方便管理多进程,发挥多核的优势,提升性能。
1万+

被折叠的 条评论
为什么被折叠?



