Django问题总结

1. 什么是 uWSGI(web服务器), WSGI(通信协议), uwsgi(线路协议) ?

uWSGI: 是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。

WSGI: 全称 Web Server Gateway Interface,是为 Python 语言定义的 Web 服务器和 Web 应用程序或框架之间的一种通信协议。

uwsgi: 是一个uWSGI服务器自有的线路协议(并非通信协议),它用于定义传输信息的类型。

img

实现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的内置组件?

  1. Admin组件:对model中对应的数据表进行增删改查
  2. model组件:负责操作数据库
  3. form组件:1.在前端生成HTML代码 2.对数据做有效性校验 3.校验信息返回并展示
  4. 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是否一致;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值