1.对Django的认识
1.Django是走大而全的方向,它最出名的是其全自动化的管理后台:只需要使用起ORM,做简单的对象定义,它就能自动生成数据库结构、以及全功能的管理后台。
2.Django内置的ORM跟框架内的其他模块耦合程度高。
应用程序必须使用Django内置的ORM,否则就不能享受到框架内提供的种种基于其ORM的便利;
理论上可以切换掉其ORM模块,但这就相当于要把装修完毕的房子拆除重新装修,倒不如一开始就去毛胚房做全新的装修。
3.Django的卖点是超高的开发效率,其性能扩展有限;采用Django的项目,在流量达到一定规模后,都需要对其进行重构,才能满足性能的要求。
4.Django适用的是中小型的网站,或者是作为大型网站快速实现产品雏形的工具。
5.Django模板的设计哲学是彻底的将代码、样式分离; Django从根本上杜绝在模板中进行编码、处理数据的可能。
2.Django 、Flask、Tornado的对比
1.Django走的是大而全的方向,开发效率高。它的MTV框架,自带的ORM,admin后台管理,自带的sqlite数据库和开发测试用的服务器给开发者提高了超高的开发效率 2.Flask是轻量级的框架,自由,灵活,可扩展性很强,核心基于Werkzeug WSGI工具和jinja2模板引擎 3.Tornado走的是少而精的方向,性能优越。它最出名的是异步非阻塞的设计方式 Tornado的两大核心模块: 1.iostraem:对非阻塞式的socket进行简单的封装 2.ioloop:对I/O多路复用的封装,它实现了一个单例
3.什么是WSGI,uwsgi,uWSGI?
1.WSGI,web服务器网关接口,是一套协议。用于接收用户请求并将请求进行初次封装,然后将请求交给web框架(描述web server和webapplication的通信规则)
WSGI server
负责从客户端接收请求,将request
转发给application
,将application
返回的response
返回给客户端;
2.uwsgi,与WSGI一样是一种通信协议,它是uWSGI服务器的独占协议,用于定义传输信息的类型
3.uWSGI, 是一个web服务器,实现了WSGI协议,uWSGI协议,http协议,
4.Django请求的生命周期
1.WSGI,将请求封装之后交给web框架
2.中间件,对请求对象进行校验或者添加其他数据比如:csrf
3.路由匹配,根据不同的url匹配不同的视图函数
4.视图函数,在视图函数中对请求进行处理(可能涉及到ORM,Template渲染)
5.中间件,对响应的数据进行处理
6.WSGI,,将响应的内容发送给浏览器
5.FBV和CBV
FBV:基于函数的视图
CBV:基于类的视图
使用CBV的优点:
1.提高了代码的复用性,可以使用面向对象的技术,比如(多继承)
2.可以使用不同的函数对不同的HTTP方法进行处理,而不是使用if...else...判断,提高可读性
6.给CBV程序添加装饰器
1.引入method_decorator模块
2.直接在类上添加装饰器
3.直接在方法上添加装饰器
7.简述MVC和MTV
MVC软件系统分为三个部分:模型(Model)、视图(View)和控制器(Controller)
Model:负责业务对象和数据库的映射
View:负责与用户的交互
Controller:接受用户的输入调用模型和视图完成用户的请求
MTV软件系统分为三个部分:模型(Model),模板(Templates),视图(View)
Model: 负责业务对象和数据库的映射
Template:负责把页面展示给用户
View: 负责与用户的交互(需要的时候调用Model和Template)
8.Django路由系统中name的作用
用户反向解析路由,相当于给url起了个别名,只要名字不变,即使路由改变,也能通过此名字找到路由
9.列举Django的内置组件:
1.Admin是对model中对应的数据表进行增删改查提供的组件
2.model组件:负责操作数据库
3.form组件:1.生成HTML代码2.数据有效性校验3校验信息返回并展示
4.ModelForm组件即用于数据库操作,也可用于用户请求的验证
10.Django中间件的作用和应用场景
中间件是介于request与response处理之间的一道处理过程,用于在全局范围内改变Django的输入和输出。
简单的来说中间件是帮助我们在视图函数执行之前和执行之后都可以做一些额外的操作
eg:
1.Django项目中默认启用了csrf保护,每次请求时通过CSRF中间件检查请求中是否有正确#token值
2.当用户在页面上发送请求时,通过自定义的认证中间件,判断用户是否已经登陆,未登陆就去登陆。
11.Django中间件的几个方法
1.process_request : 请求进来时,权限认证 2.process_view : 路由匹配之后,能够得到视图函数 3.process_exception : 异常时执行 4.process_template_responseprocess : 模板渲染时执行 5.process_response : 请求有响应时执行
12.django的request对象是在什么时候创建的( wsgi.py)
class WSGIHandler(base.BaseHandler):
request = self.request_class(environ) 请求走到WSGIHandler类的时候,执行__cell__方法,将environ封装成了request
13.Django重定向的实现
1.使用HttpResponseRedirect
2.使用redirect和reverse
3.状态码:301和302
301:常用来做域名跳转(旧资源已经移除,跳转到新资源)
302:常用来做临时跳转(要访问的资源还在,但是没有条件访问)
14 csrf实现机制
第一步:django第一次响应来自某个客户端的请求时,后端随机产生一个token值,把这个token保存在SESSION状态中;同时,后端把这个token放到cookie中交给前端页面;
第二步:下次前端需要发起请求(比如发帖)的时候把这个token值加入到请求数据或者头信息中,一起传给后端;Cookies:{csrftoken:xxxxx}
第三步:后端校验前端请求带过来的token和SESSION里的token是否一致;
15基于django使用ajax发送post请求时,都可以使用哪种方法携带csrf token?
以键值对的形式放到要传输的数据data中
16.Django本身提供了runserver,为什么不能用来部署?(runserver与uWSGI的区别)
1.runserver方法是调试 Django 时经常用到的运行方式,它使用Django自带的 WSGI Server 运行,主要在测试和开发中使用,并且 runserver 开启的方式也是单进程 。 2.uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http 等协议。注意uwsgi是一种通信协议,而uWSGI是实现uwsgi协议和WSGI协议的 Web 服务器。 uWSGI具有超快的性能、低内存占用和多app管理等优点,并且搭配着Nginx就是一个生产环境了,能够将用户访问请求与应用 app 隔离开,实现真正的部署 。 相比来讲,支持的并发量更高,方便管理多进程,发挥多核的优势,提升性能。
原文地址:https://www.cnblogs.com/abel01250303/p/9749669.html