编程学习网 > 编程语言 > Python > django框架面试常问的题目是什么?
2022
08-09

django框架面试常问的题目是什么?

前段时间看到许多小伙伴面试Python工程师或者django工程师时,在大厂时遇到了一些不熟悉的试题,导致没有拿到想要的offer。其实,在掌握的技术能力相同的情况下,回答的内容是否全面是否精准,是你能关系拿offer的最重要的一个环节。所以,在面试前积累常用的面试题可以有备无患。接下来就给大家分享一下django框架面试常问的题目是什么?希望对你有所帮助!

1、Django 、Flask、Tornado的区别?

1.Django走的是大而全的方向,开发效率高。它的MTV框架,自带的ORM,admin后台管理,自带的sqlite数据库和开发测试用的服务器给开发者提高了超高的开发效率
2.Flask是轻量级的框架,自由,灵活,可扩展性很强,核心基于Werkzeug WSGI工具和jinja2模板引擎
3.Tornado走的是少而精的方向,性能优越。它最出名的是异步非阻塞的设计方式
Tornado的两大核心模块:

  • iostraem:对非阻塞式的socket进行简单的封装
  • ioloop:对I/O多路复用的封装,它实现了一个单例

2、什么是wsgi,uwsgi,uWSGI?

WSGI:
web服务器网关接口,是一套协议。用于接收用户请求并将请求进行初次封装,然后将请求交给web框架
实现wsgi协议的模块:

  • wsgiref,本质上就是编写一个socket服务端,用于接收用户请求(django)
  • werkzeug,本质上就是编写一个socket服务端,用于接收用户请求(flask)

uwsgi:
与WSGI一样是一种通信协议,它是uWSGI服务器的独占协议,用于定义传输信息的类型
uWSGI:
是一个web服务器,实现了WSGI协议,uWSGI协议,http协议,

16. 基于django使用ajax发送post请求时,都可以使用哪种方法携带csrf token?

1.后端将csrftoken传到前端,发送post请求时携带这个值发送

data: { csrfmiddlewaretoken: '{{ csrf_token }}'       },

2.获取form中隐藏标签的csrftoken值,加入到请求数据中传给后端

data: { csrfmiddlewaretoken:$('[name="csrfmiddlewaretoken"]').val() },

3.cookie中存在csrftoken,将csrftoken值放到请求头中

headers:{ "X-CSRFtoken":$.cookie("csrftoken")},

4. django请求的生命周期?

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

5. 简述什么是FBV和CBV?

FBV和CBV本质是一样的
基于函数的视图叫做FBV,基于类的视图叫做CBV
在python中使用CBV的优点:
1.提高了代码的复用性,可以使用面向对象的技术,比如Mixin(多继承)
2.可以用不同的函数针对不同的HTTP方法处理,而不是通过很多if判断,提高代码可读性

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

引入method_decorator模块
(1.直接在类上加装饰器




@method_decorator(test,name='dispatch')class Loginview(View): pass

(2.直接在处理的函数前加装饰器




@method_decorator(test)def post(self,request,*args,**kwargs): pass

7. 简述MVC和MTV?

MVC软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)

  • Model:负责业务对象与数据库的映射(ORM)
  • View:负责与用户的交互
  • Control:接受用户的输入调用模型和视图完成用户的请求

Django框架的MTV设计模式借鉴了MVC框架的思想,三部分为:Model、Template和View

  • Model(模型):负责业务对象与数据库的对象(ORM)
  • Template(模版):负责如何把页面展示给用户
  • View(视图):负责业务逻辑,并在适当的时候调用Model和Template

此外,Django还有一个urls分发器,
它将一个个URL的页面请求分发给不同的view处理,view再调用相应的Model和Template

8. django路由系统中name的作用?

用于反向解析路由,相当于给url取个别名,只要这个名字不变,即使对应的url改变通过该名字也能找到该条url

9. 列举django的内置组件?

1.Admin是对model中对应的数据表进行增删改查提供的组件
2.model组件:负责操作数据库
3.form组件:1.生成HTML代码2.数据有效性校验3校验信息返回并展示
4.ModelForm组件即用于数据库操作,也可用于用户请求的验证

10. 说一下Django,MIDDLEWARES中间件的作用和应用场景?

中间件是介于request与response处理之间的一道处理过程,用于在全局范围内改变Django的输入和输出。
简单的来说中间件是帮助我们在视图函数执行之前和执行之后都可以做一些额外的操作
例如:
1.Django项目中默认启用了csrf保护,每次请求时通过CSRF中间件检查请求中是否有正确#token值
2.当用户在页面上发送请求时,通过自定义的认证中间件,判断用户是否已经登陆,未登陆就去登陆。
3.当有用户请求过来时,判断用户是否在白名单或者在黑名单里

11. 列举django中间件的5个方法?

process_request : 请求进来时,权限认证
process_view : 路由匹配之后,能够得到视图函数
process_exception : 异常时执行
process_template_responseprocess : 模板渲染时执行
process_response : 请求有响应时执行

12. django的request对象是在什么时候创建的?




class WSGIHandler(base.BaseHandler): request = self.request_class(environ)

请求走到WSGIHandler类的时候,执行__cell__方法,将environ封装成了request

13. Django重定向是如何实现的?用的什么状态码?

1.使用HttpResponseRedirect




from django.http import HttpResponseRedirect

2.使用redirect和reverse
状态码:301和302
301和302的区别:
相同点:都表示重定向,浏览器在拿到服务器返回的这个状态码后会自动跳转到一个新的URL地址
不同点:

  • 301比较常用的场景是使用域名跳转。比如,我们访问 http://www.baidu.com 会跳转到https://www.baidu.com表示旧地址A的资源已经被永久地移除了
  • 302用来做临时跳转,比如未登陆的用户访问用户中心重定向到登录页面。表示旧地址A的资源还在(仍然可以访问),这个重定向只是临时地从旧地址A跳转到地址B

14. xss攻击

– XSS攻击是向网页中注入恶意脚本,用在用户浏览网页时,在用户浏览器中执行恶意脚本的攻击。

– XSS分类,反射型xss ,存储型xss
– 反射型xss又称为非持久型xss,攻击者通过电子邮件等方式将包含注入脚本的链接发送给受害者,受害者通过点击链接,执行注入脚本,达到攻击目的。
– 持久型xss跟反射型的最大不同是攻击脚本将被永久的存放在目标服务器的数据库和文件中,多见于论坛攻击脚本连同正常信息一同注入到帖子内容当中,当浏览这个被注入恶意脚本的帖子的时候,恶意脚本会被执行

防范措施 1 输入过滤 2 输出编码 3 cookie防盗
1,输入过滤 用户输入进行检测 不允许带有js代码
2,输出编码 就是把我们的脚本代码变成字符串形式输出出来
3,cookie加密向页面注入恶意的代码,这些代码被浏览器执行

XSS攻击能做些什么:
1.窃取cookies
2.读取用户未公开的资料,如果:邮件列表或者内容、系统的客户资料,联系人列表

解决方法:
1.客户度端:表单提交之前或者url传递之前,对需要的参数进行过滤
2.服务器端:检查用户输入的内容是否有非法内容

15. django中csrf的实现机制

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

以上就是“django框架面试常问的题目是什么?”的详细内容,想要了解更多django框架内容欢迎持续关注编程学习

扫码二维码 获取免费视频学习资料

Python编程学习

查 看2022高级编程视频教程免费获取