【django】django面试题总结

一、django中间件的使用

Django在中间件中预置了六个方法,这六个方法的区别在于不同的阶段执行,对输入或输出进行干预,方法如下:

1.初始化:无需任何参数,服务器响应第一个请求的时候调用一次,用于确定是否启用当前中间件

def __init__(): 
	pass

2.处理请求前:在每个请求上调用,返回None或HttpResponse对象。

def process_request(request): 
	pass

3.处理视图前:在每个请求上调用,返回None或HttpResponse对象。

def process_view(request,view_func,view_args,view_kwargs): 
	pass

4.处理模板响应前:在每个请求上调用,返回实现了render方法的响应对象。

def process_template_response(request,response): 
	pass

5.处理响应后:所有响应返回浏览器之前被调用,在每个请求上调用,返回HttpResponse对象。

def process_response(request,response): 
	pass

6.异常处理:当视图抛出异常时调用,在每个请求上调用,返回一个HttpResponse对象。

def process_exception(request,exception): 
	pass

二、简述Django请求生命周期

在这里插入图片描述

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

1.wsgi ,请求封装后交给web框架(Flask,Django)
2.中间件,对请求进行校验或在请求对象中添加其他相关数据,例如:csrf,request.session
3.路由匹配 根据浏览器发送的不同url去匹配不同的视图函数
4.视图函数,在视图函数中进行业务逻辑的处理,可能涉及到:orm,templates
5.中间件,对响应的数据进行处理
6.wsgi,将响应的内容发送给浏览器

三、对cookies与session的了解?他们能单独用吗?

Session采用的是在服务器端保持状态的方案,而Cookie采用的是在客户端保持状态的方案。但是禁用Cookie就不能得到Session。因为Session是用Session ID来确定当前对话所对应的服务器Session,而Session ID是通过Cookie来传递的,禁用Cookie相当于SessionID,也就得不到Session。

四、Django中哪里用到了线程?哪里用到了协程?哪里用到了进程?

1.Django中耗时的任务用一个进程或者线程来执行,比如发邮件,使用celery.

2.部署django项目是时候,配置文件中设置了进程和协程的相关配置。

五、谈一下你对uWSGI和nginx的理解?

1.uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。它是一个Web服务器(如nginx,uWSGI等服务器)与web应用(如用Flask框架写的程序)通信的一种规范。

要注意WSGI/uwsgi/uWSGI这三个概念的区分。

WSGI是一种通信协议。

为什么有了uWSGI为什么还需要nginx?
因为nginx具备优秀的静态内容处理能力,然后将动态内容转发给uWSGI服务器,这样可以达到很好的客户端响应。
nginx 是一个开源的高性能的HTTP服务器和反向代理:

1.作为web服务器,它处理静态文件和索引文件效果非常高

2.它的设计非常注重效率,最大支持5万个并发连接,但只占用很少的内存空间

3.稳定性高,配置简洁。

4.强大的反向代理和负载均衡功能,平衡集群中各个服务器的负载压力应用

六、用的restframework完成api发送时间时区

class getCurrenttime(APIView): 
	def get(self,request): 
		local_time = time.localtime() 
		time_zone =settings.TIME_ZONE 
		temp = {'localtime':local_time,'timezone':time_zone} 
		return Response(temp)

七、Django、Flask、Tornado的对比

1、 Django走的大而全的方向,开发效率高。它的MTV框架,自带的ORM,admin后台管理,自带的sqlite数据库和开发测试用的服务器,给开发者提高了超高的开发效率。 重量级web框架,功能齐全,提供一站式解决的思路,能让开发者不用在选择上花费大量时间。
自带ORM和模板引擎,支持jinja等非官方模板引擎。

自带ORM使Django和关系型数据库耦合度高,如果要使用非关系型数据库,需要使用第三方库

自带数据库管理app

成熟,稳定,开发效率高,相对于Flask,Django的整体封闭性比较好,适合做企业级网站的开发。python web框架的先驱,第三方库丰富

2、 Flask 是轻量级的框架,自由,灵活,可扩展性强核心基于Werkzeug WSGI工具 和jinja2 模板引擎

适用于做小网站以及web服务的API,开发大型网站无压力,但架构需要自己设计

与关系型数据库的结合不弱于Django,而与非关系型数据库的结合远远优于Django

3、 Tornado走的是少而精的方向,性能优越,它最出名的异步非阻塞的设计方式

Tornado的两大核心模块:

iostraem:对非阻塞的socket进行简单的封装

ioloop: 对I/O 多路复用的封装,它实现一个单例

在这里插入图片描述

  • 10
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 18
    评论
1. 什么是DjangoDjango是一个基于Python的Web框架,它提供了一系列的工具和库,可以帮助我们快速地构建高质量的Web应用程序。 2. 什么是DRF? DRF是Django Rest Framework的缩写,是一个基于Django的RESTful API框架。它提供了一系列的工具和库,可以帮助我们快速地构建高质量的RESTful API。 3. 什么是RESTful API? RESTful API是一种基于HTTP协议的Web服务架构风格,它使用HTTP协议中的GET、POST、PUT、DELETE等请求方法来实现对资源的操作。RESTful API的设计原则是简单、可扩展和易于维护。 4. DRF中的序列化器(Serializer)是什么? 序列化器是DRF中的一个核心概念,它用于将Python对象转换为JSON格式,或将JSON格式转换为Python对象。序列化器可以帮助我们快速地实现数据的序列化和反序列化,是DRF中非常重要的一个组件。 5. DRF中的视图(View)是什么? 视图是DRF中的一个核心概念,它用于处理HTTP请求。DRF提供了一系列的视图类,包括基于函数的视图、基于类的视图、通用视图等,可以帮助我们快速地实现API的功能。 6. DRF中的路由(Router)是什么? 路由是DRF中用于处理URL映射的组件。DRF提供了一系列的路由类,包括简单路由、默认路由、嵌套路由等,可以帮助我们快速地实现API的URL映射。 7. DRF中的认证(Authentication)和权限(Permission)是什么? 认证是DRF中用于验证用户身份的组件,包括基于Token、Session、OAuth2等多种认证方式。权限是DRF中用于控制用户访问权限的组件,包括基于角色、组、自定义函数等多种权限控制方式。 8. DRF中如何实现文件上传和下载? DRF提供了一系列的文件上传和下载组件,包括基于Django自带的文件上传组件、第三方库django-storages等。我们可以使用这些组件来实现文件的上传和下载功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敲代码敲到头发茂密

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值