【Django】面试

1、简述MVC模式和MVT模式

所谓MVC就是把web应用分为模型(M)、控制器©和视图(V)三层,模型负责业务对象与数据库的映射(ORM),视图负责与用户的交互,控制器接收用户的请求。MVT模式的本质上和MVC一样,只是定义上有些许不同,Django的MVT分别是指:M代表模型,负责业务对象和数据库的关系映射,T代表模板,负责如何把页面展示给用户,V代表视图,负责业务处理。除了以上三层以外,还需要一个url分发器,他的作用是将一个个url的页面请求分发给不同的视图处理,视图再调用响应的模型和模板

2、简述django请求的生命周期

一般是用户通过浏览器向我们的服务器发起一个请求,这个请求会去访问视图函数(如果不涉及到数据调用,那么这个时候视图函数会返回一个模板也就是一个网页给用户),视图函数调用模型,模型去数据库查找数据,然后逐级返回,视图函数把返回的数据填充到模板中,最后返回页面给用户。

3、django的内置组件

admin组件:是对model中对应的数据表进行增删改查提供的组件
model组件:负责操作数据库

4、django中间件的方法

多个中间件执行顺序:处理请求自上而下,返回响应自下而上

  • process_request:请求进来时,权限认证

  • process_response:请求响应时执行

  • process_view:路由匹配之后,能够得到视图函数

  • process_exception:异常时执行

  • process_template_responseprocess:模板渲染时执行

5、简述什么是FBV和CBV

FBV和CBV本质是一样的,基于函数的视图叫做FBV,基于类视图叫做CBV

python中使用CBV的优点:

  • 提高了代码的复用性,可以使用面向对象的技术,比如Mixin
  • 可以用不同的函数针对不同的HTTP方法处理,而不是通过if判断,提高代码的可读性

6、如何给CBV的程序添加装饰器

from django.utils.decorators import method_decorator

	@method_decorator()
	def post(self,request):
		pass

7、django orm中三种能写sql语句的方法

# 1、使用execute执行自定义的sql(类似于pymysql的用法)
from django.db import connection
cursor = connection.cursor()
cursor.execute("原生sql语句")
ret = cursor.fetchall()

# 2、使用extra():queryset.extra(select={"key": "原生sql语句"})

# 3、使用raw方法

8、cookie和session的区别

"""
cookie:cookie是保存在浏览器端的键值对,可以用来做用户认证
session:将用户的会话信息保存在服务端,key值是随机产生的字符串,value值是session的内容
依赖于cookie将每个用户的随机字符串保存到用户浏览器上
Django中session默认保存在数据库中:django_session表
flask中session默认将加密的数据写在用户的cookie中
"""

9、django的model中的外键字段中的on_delete参数作用?

删除关联表中的数据时,当前表与其关联的字段的操作
django2.0之后,表与表之间关联的时候,必须要写on_delete参数,否则会报异常

10、django中csrf的实现机制

第一步:django第一次响应来自某个客户端的请求时,后端随机产生一个token值,把这个token保存在session状态中,同时,后端把这个token放到cookie中交给前端页面
第二步:下次前端需要发起请求的时候把这个token值加入到请求数据或者头信息中一起传给后端
第三步:后端校验前端请求带过来的token和session里的token是否一致

11、django本身提供了runserver,为什么不能用来部署?(runserver与uWSGI的区别)

runserver方法是调试django时经常用到的运行方式,是django自带的,runserver开启的方式是单进程
WSGI Server运行,主要在测试和开发中使用
uWSGI是一个web服务器,它实现了WSGI协议、uwsgi、HTTP等协议。注意uwsgi是一种通信协议,而uWSGI是实现uwsgi协议和WSGI协议的 Web 服务器。uWSGI具有超快的性能、低内存占用和多app管理等优点,并且搭配着Nginx就是一个生产环境了,能够将用户访问请求与应用 app 隔离开,实现真正的部署 。相比来讲,支持的并发量更高,方便管理多进程,发挥多核的优势,提升性能。

12、django如何实现websocket?

django实现websocket官方推荐大家使用channels。channels通过升级http协议 升级到websocket协议。保证实时通讯。也就是说,我们完全可以用channels实现我们的即时通讯。而不是使用长轮询和计时器方式来保证伪实时通讯。他通过改造django框架,使django既支持http协议又支持websocket协议。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值