1. 什么是 uWSGI(web服务器), WSGI(通信协议), uwsgi(线路协议) ?
uWSGI: 是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。
WSGI: 全称 Web Server Gateway Interface,是为 Python 语言定义的 Web 服务器和 Web 应用程序或框架之间的一种通信协议。
uwsgi: 是一个uWSGI服务器自有的线路协议(并非通信协议),它用于定义传输信息的类型。
实现wsgi协议的模块:
- (django) wsgiref,本质上就是编写一个socket服务端,用于接收用户请求
- (flask) werkzeug,本质上就是编写一个socket服务端,用于接收用户请求
2. Django请求的生命周期?
- - wsgi, 对于浏览器来说,它就是socket服务端,用于接收用户请求并将请求进行初次封装,然后交给web框架(Flask、Django)
- - 中间件,帮助我们对请求进行校验或在请求对象中添加其他相关数据,例如:csrf、request.session
- - 路由匹配
- - 视图函数,在视图函数中进行业务逻辑的处理,可能涉及到:orm、templates => 渲染
- - 中间件,对响应的数据进行处理。
- - wsgi,将响应的内容发送给浏览器。
3. 简述 FBV 和 CBV ?
FBV(function base view),基于函数的视图
CBV(class base view), 基于类的视图
在python中使用CBV的优点:
- 提高了代码的复用性,可以使用面向对象的技术,比如Mixin(多继承)
- 可以用不同的函数针对不同的HTTP方法处理,而不是通过很多if判断,提高代码可读性
4. 简述 MVC 和 MTV ?
MVC 软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。
-
Model:负责业务对象与数据库的映射(ORM)。
-
View:负责与用户的交互。
-
Control:接受用户的输入调用模型和视图完成用户的请求。
MTV(Django)设计模式借鉴了MVC框架的思想,三部分为:Model、Template和View。
-
Model(模型):负责业务对象与数据库的对象(ORM)。
-
Template(模版):负责如何把页面展示给用户。
-
View(视图):负责业务逻辑,并在适当的时候调用Model和Template。
5. 列举Django的内置组件?
- Admin组件:对model中对应的数据表进行增删改查
- model组件:负责操作数据库
- form组件:1.在前端生成HTML代码 2.对数据做有效性校验 3.校验信息返回并展示
- ModelForm组件:即用于数据库操作,也可用于用户请求的验证
6. Django 外键ForeignKey中的on_delete的作用
当你在Django中删除了一个有着外键关联的数据时,比如一个作者和他名下的所有的书的信息,书的外键是作者(一个作者可有好多本书),当你把作者的信息从数据库中删除时,Django提供了一下几个参数来对作者的书的数据进行操作
外键的定义:
#models.py
class Author(models.Model):
author = models.CharField(max_length=250)
class Books(models.Model):
book = models.ForeignKey(Author,on_delete=models.CASCADE)
-
CASCADE:删除作者信息一并删除作者名下的所有书的信息;
-
PROTECT:删除作者的信息时,采取保护机制,抛出错误,即不删除Books的内容;
-
SET_NULL:只有当null=True才将关联的内容置空;
-
SET_DEFAULT:设置为默认值;
-
SET( ):括号里可以是函数,设置为自己定义的东西;
-
DO_NOTHING:字面的意思,啥也不干,你删除你的和我没关系
7. django中only和defer的区别?
defer---->除了指定字段之外
only---->只查询几个字段
ret=Book.object.all().defer('id','name'): 取出对象,字段除了id和name,其他字段都有
ret=Book.object.all().only('id','name'): 取的对象,只有id和name
8.django缓存机制
由于Django是动态网站,所有每次请求都会去对数据进行相应的处理操作,当程序访问量大时,耗时必然明显增加,最简单的解决方式就是使用缓存机制
,缓存将一个某个views的返回值保存至内存或者memcache中,短时间内再有人来访问时,则不再去执行view中的操作,而是直接从缓冲中获取并返回。
django提供了六种内存缓存机制,分别为:
- 开发调试缓存(为开发调试使用,实际上不使用任何操作);
- 内存缓存(将缓存内容缓存到内存中);
- 文件缓存(将缓存内容写到文件 );
- 数据库缓存(将缓存内容存到数据库);
- memcache缓存(pylibmc);
- memcache缓存(python-memcached)。
9.django中间件的5个方法
- process_request : 请求进来时,权限认证
- process_view : 路由匹配之后,能够得到视图函数
- process_exception : 异常时执行
- process_template_responseprocess : 模板渲染时执行
- process_response : 请求有响应时执行
10.django的内置组件?
Admin
是对model中对应的数据表进行增删改查提供的组件model
组件:负责操作数据库form
组件:1.生成HTML代码2.数据有效性校验3校验信息返回并展示ModelForm
组件即用于数据库操作,也可用于用户请求的验证
11.django中csrf的实现机制
第一步:django第一次响应来自某个客户端的请求时,后端随机产生一个token
值,把这个token
保存在SESSION状态中;同时,后端把这个token
放到cookie
中交给前端页面;
第二步:下次前端需要发起请求(比如发帖)的时候把这个token
值加入到请求数据或者头信息中,一起传给后端:Cookies:{csrftoken:xxxxx}
;
第三步:后端校验前端请求带过来的token和SESSION里的token是否一致;