版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PythonDjango高频面试题及详细答案(实战向)一、Django基础核心面试题1.简述Django的MTV架构,和传统MVC的区别答案:Django采用MTV架构,是MVC架构的衍生适配版本,核心职责拆分清晰:-M(Model模型):对应数据层,负责数据库表映射、数据增删改查、字段校验,完全对接数据库,不处理业务逻辑;-T(Template模板):对应视图层,负责页面展示,专注渲染HTML、静态资源、变量填充,不处理数据逻辑;-V(View视图):对应控制层,承接前端请求,调用模型获取数据、处理业务逻辑、传递数据给模板,返回响应结果。和传统MVC的核心区别:传统MVC中C(控制器)负责路由分发、逻辑处理,V负责页面展示;而Django将控制器的路由功能单独抽离,交给urls路由系统处理,视图只专注业务逻辑,职责更单一,项目分层更清晰,这也是Django架构更规范、易维护的核心原因。2.Django中app的作用是什么?为什么项目要拆分多个app?答案:app是Django项目的功能模块单元,一个Django项目可以包含多个独立app,每个app对应一套独立的模型、视图、模板、路由,用于承载单一业务功能。拆分多app的核心优势:1.解耦性强:不同业务模块独立拆分,比如用户模块、订单模块、商品模块各自为单独app,模块之间互不干扰;2.可复用性高:通用功能的app(如用户认证、日志记录)可以直接移植到其他Django项目;3.便于维护迭代:业务代码分类清晰,排查bug、新增功能、修改逻辑不会影响全局代码;4.支持团队协作:不同开发人员可以负责不同app的开发,避免代码冲突。3.简述Django项目启动的完整流程答案:1.执行启动命令(pythonmanage.pyrunserver),加载项目配置文件settings.py,注册所有已安装的app、中间件;2.初始化Django核心组件,包括路由系统、ORM模型、模板引擎、静态资源配置;3.启动本地WSGI服务,监听指定端口,等待客户端请求;4.接收前端请求后,经过中间件逐层校验、处理;5.路由系统根据请求URL,匹配urls.py中的路由规则,分发到对应视图函数/类视图;6.视图执行业务逻辑,调用ORM操作数据库,获取/处理数据;7.视图将数据传递给模板,渲染HTML页面或直接返回JSON数据;8.响应数据经过中间件逐层返回,最终给到客户端浏览器。二、路由系统面试题(URLs)1.Django中绝对路径路由和命名路由的区别?命名路由的使用场景答案:-绝对路径路由:直接在路由中写死完整URL地址,比如path('login/',login_view),跳转时必须写固定路径;-命名路由:给路由规则设置name参数,通过name别名匹配路由,无需写死URL。核心区别:项目迭代中如果修改URL路径,绝对路径需要全局修改所有跳转位置,命名路由只需修改路由配置,无需改动业务代码,维护成本极低。使用场景:前端模板跳转、视图函数内部重定向、接口反向解析、权限匹配等所有需要生成URL的场景。使用示例:路由配置:path('user/login/',login_view,name='user_login')视图反向解析:reverse('user_login')模板跳转:{%url'user_login'%}2.Django路由分层分发(include)的作用和原理答案:include用于路由分层分发,将主项目的总路由,拆分到各个app内部的urls.py中管理。主路由只负责分发模块前缀,具体业务路由由各app自己维护。作用:1.避免主路由文件臃肿,适配大型项目;2.各app路由独立管理,完全解耦;3.支持路由前缀统一配置,批量管理模块接口。原理:客户端请求URL先匹配主路由前缀,匹配成功后,截取剩余路径,交给对应app的子路由继续匹配,最终定位到视图。3.Django2.x和1.x路由的核心区别答案:1.Django1.x使用url()方法,基于正则匹配,语法繁琐,容易出现正则冲突;Django2.x废弃url(),主推path()简洁路由,支持路径参数自动类型转换;2.2.x保留re_path()用于正则路由,兼容旧项目,日常开发优先使用path();3.path()支持默认路径转换器(int、str、slug、uuid等),无需手动正则匹配参数类型,代码更简洁安全。三、ORM数据库面试题(高频重点)1.简述DjangoORM的作用,以及ORM的优缺点答案:DjangoORM是对象关系映射工具,无需手写SQL语句,通过面向对象的类和方法,实现对数据库的增删改查操作,自动将对象操作转化为原生SQL,适配MySQL、PostgreSQL、SQLite等多种数据库。优点:1.开发效率高,不用手写大量重复SQL;2.数据库适配性强,切换数据库基本不用修改业务代码;3.自带字段校验、事务、迁移功能,安全性高;4.语法统一,代码可读性、可维护性好。缺点:1.复杂多表联查、统计查询,手写SQL效率更高,ORM会生成冗余SQL;2.过度依赖ORM容易出现查询冗余问题,产生N+1查询漏洞;3.极致性能场景下,ORM性能略低于原生SQL。2.什么是ORMN+1查询问题?如何解决?答案:问题原理:查询多张关联表数据时,先查询主表N条数据(1次查询),再循环每条主表数据,单独查询关联外键表数据(N次查询),总共触发N+1次数据库查询,数据库压力极大,数据量越大卡顿越明显。解决方案:1.select_related:针对一对一、一对多正向关联,连表查询,一次性加载关联数据,只执行1次SQL;2.prefetch_related:针对多对多、一对多反向关联,子查询批量加载数据,避免循环查询;3.极简场景可手动原生SQL联查优化。3.DjangoORM中filter和exclude的区别,get和first的区别答案:filtervsexclude-filter():条件筛选,返回符合条件的所有数据,结果是QuerySet对象,空数据不报错;-exclude():反向筛选,返回不符合条件的所有数据,用于排除指定数据。getvsfirst-get():精准查询单条数据,有且仅有一条数据时正常返回;无数据抛DoesNotExist异常,多条数据抛MultipleObjectsReturned异常;-first():从QuerySet中取第一条数据,无数据返回None,不会抛异常,适合不确定数据条数的场景。4.Django数据迁移(migrate)原理,makemigrations和migrate的区别答案:makemigrations:检测models模型的新增、修改、删除变化,自动生成迁移脚本文件,记录数据库结构变更记录,不会操作真实数据库。migrate:读取迁移脚本,将模型变更同步到真实数据库中,创建、修改、删除数据表和字段,同时记录迁移执行状态。迁移原理:Django会在数据库中生成django_migrations表,记录每一条迁移记录,保证多人协作、版本迭代中数据库结构统一,避免重复执行迁移脚本。5.Django事务的使用场景和用法答案:使用场景:多步数据库操作必须同时成功或同时失败的场景,比如下单扣库存、转账、订单创建等,避免部分成功部分失败导致数据不一致。常用用法:使用django.db.transaction事务装饰器/上下文管理器1.装饰器用法:整个视图函数包裹,函数内所有数据库操作统一事务;2.上下文管理器:局部代码开启事务,精准控制事务范围。特性:默认原子事务,任意步骤报错,自动回滚所有数据库操作,无异常则统一提交。四、视图与请求响应面试题1.函数视图(FBV)和类视图(CBV)的区别和适用场景答案:FBV(函数视图):以函数形式编写视图,结构简单,上手容易,逻辑直观。-优点:代码简洁,适合简单接口、单次业务逻辑;-缺点:代码复用性差,不同请求方式(get/post)需要手动判断,复杂业务代码冗余。CBV(类视图):基于面向对象的类视图,继承View基类,自动分发get、post、put、delete请求。-优点:代码复用性强,支持继承、重写,请求方式拆分清晰,适合标准化接口开发;-缺点:简单业务略显繁琐,需要理解类继承和分发原理。场景选择:简单业务、临时接口用FBV;标准化CRUD接口、多请求方式、需要复用逻辑用CBV。2.Django中request对象常用参数有哪些?答案:-request.method:获取当前请求方式(GET/POST/PUT/DELETE);-request.GET:获取get请求参数,类字典对象;-request.POST:获取post表单请求参数;-request.body:获取原始请求体,用于解析json格式参数;-request.user:获取当前登录用户对象;-request.session:操作会话信息;-request.FILES:获取上传的文件数据。3.Django如何接收JSON参数?答案:Django的request.POST只能接收表单格式数据,无法直接解析JSON,需要通过request.body获取原始二进制数据,loads解析为字典。标准写法:读取request.body,通过json.loads解析,同时兼容空数据、异常场景。后期DRF框架封装了JSON解析,可直接通过request.data获取。五、中间件面试题(核心难点)1.什么是Django中间件?作用是什么?答案:中间件是Django请求生命周期的钩子组件,介于客户端请求和视图之间,能够全局拦截所有请求和响应,统一处理全局通用逻辑,无需在每个视图重复编写代码。常用场景:全局登录校验、权限拦截、请求日志记录、跨域处理、参数校验、响应统一封装、防爬虫限流等。2.Django中间件的执行顺序和生命周期答案:执行顺序:请求阶段从上到下执行中间件,响应阶段从下到上执行中间件,和settings中MIDDLEWARE配置顺序一致。五大核心钩子(生命周期):1.process_request:请求进入,未匹配路由前执行;2.process_view:匹配路由后,执行视图前执行;3.process_template_response:视图返回模板响应时执行;4.process_response:视图执行完毕,返回响应给客户端前执行;5.process_exception:视图执行报错触发异常时执行,用于全局异常捕获。六、模板与静态文件面试题1.Django模板中变量、标签、过滤器的区别答案:-变量:{{变量名}},用于渲染后端传递的普通数据;-标签:{%标签%},用于实现逻辑功能,比如循环for、判断if、路由跳转、模板继承;-过滤器:{{变量|过滤器}},用于处理变量数据,比如日期格式化、字符串截取、默认值设置。2.Django静态文件配置原理,为什么DEBUG模式和线上模式配置不同?答案:静态文件包括css、js、图片、字体文件等。DEBUG=True开发模式下,Django内置静态文件服务,自动识别STATIC_URL和STATIC_ROOT,直接加载本地静态资源,无需配置nginx;线上生产环境DEBUG=False,Django关闭静态文件服务,静态资源全部由Nginx反向代理托管,减轻Django服务压力,提升访问速度。七、认证与会话面试题1.Djangosession和cookie的区别,以及工作原理答案:Cookie:存储在客户端浏览器的小型文本数据,不安全、容量小,跟随每次请求自动携带,用于标识客户端;Session:存储在服务端的会话数据,安全可靠,通过cookie中的sessionid匹配服务端会话数据,实现用户状态保持。工作原理:用户首次访问服务端,Django生成唯一sessionid,通过cookie返回给浏览器;后续请求携带sessionid,服务端根据id读取用户会话信息,识别用户登录状态。2.Django自带auth认证系统的核心用法答案:Django内置完整的用户认证模块,无需手动开发登录、注册、校验逻辑:1.authenticate():校验用户名密码,验证成功返回用户对象,失败返回None;2.login():记录用户登录状态,写入session;3.logout():清除用户session,退出登录;4.@login_required装饰器:全局校验用户是否登录,未登录自动跳转登录页。同时支持自定义用户表,继承AbstractUser扩展用户字段,适配业务需求。八、项目优化与实战面试题(进阶)1.简述Django项目常用的性能优化方案答案:1.数据库优化:解决N+1查询、合理加索引、分页查询、避免全表扫描、复杂SQL手写原生语句;2.缓存优化:配置Redis缓存,缓存高频查询数据、页面静态数据,减少数据库访问压力;3.代码优化:精简冗余逻辑、复用公共方法、合理使用CBV减少重复代码;4.请求优化:中间件精简,只保留必要全局逻辑,减少请求拦截耗时;5.部署优化:线上使用Nginx+Gunicorn部署,关闭DEBUG模式,分离静态资源;6.数据优化:大表数据分表、定时清理冗余数据、异步处理耗时任务(Celery)。2.Django如何处理高并发、耗
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 乳腺癌研究第一株 MCF-7雌激素受体阳性、贴壁慢
- 北京大学能源研究院:中国石化行业绿色高质量转型研究
- 湖南成考专升本教育理论刷题真题库
- 甘肃成考专升本生态学基础真题附答案卷
- 2026-2027年河北张家口蔚县农业农村局特聘农技推广人员5名笔试备考题库及答案解析
- 2026年雅安市烟草专卖局人员招聘考试模拟试题及答案
- 2026贵州省职工医院第四批见习生招收考试备考试题及答案解析
- 2026年甘肃省武威职业技术大学高层次人才引进17人考试备考题库及答案解析
- 2026浙江金华市保安服务有限公司招聘派遣制人员1人笔试模拟试题及答案解析
- 新疆克拉玛依职业技术学院2027届校园招聘考试备考试题及答案解析
- 2026年云南省交通投资建设集团有限公司人员招聘考试参考试题及详细答案解析
- 8.3推动高质量发展 课件 2026-2027学年统编版九年级上册
- 自考 15044 马克思主义基本原理重点精简版
- 《大学生创新创业法律实务》课件-单元六创新创业中的劳动法律制度
- 26秋季小学道德与法治五年级上册第9课-综合国力日益提升-2课时教学设计
- 2026家长开学第一课主题班会课件
- 中考英语专练:短文语法填空(模拟10篇)
- 2026年机动车外检模拟试卷(含答案)
- 反诈知识竞赛考试题库(100题含答案)
- 老年人疼痛管理与舒适护理技术
- 2026年幼儿园教师安全常规培训
评论
0/150
提交评论