版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Django高频面试题及详细答案(实战版)一、Django基础核心面试题1.简单介绍一下Django框架,以及它的特点Django是一款基于Python的开源全栈Web开发框架,遵循MTV架构,主打快速开发、代码规范、开箱即用,是企业PythonWeb开发主流框架之一。核心特点:遵循MTV架构:分层清晰,解耦性强,分别负责数据、模板展示、业务逻辑,方便维护和迭代。自带丰富组件:内置ORM数据库操作、后台管理系统、用户认证、表单验证、路由分发、错误处理等功能,无需重复造轮子。开发效率高:语法简洁,配置简单,一套代码可快速完成中小型网站、后台系统、接口服务开发。安全性高:默认防范CSRF、XSS、SQL注入、点击劫持等常见Web漏洞,自带安全校验机制。可扩展性强:支持自定义中间件、装饰器、信号、第三方插件,适配前后端分离、爬虫后台、数据分析平台等多种场景。2.说说DjangoMTV和传统MVC的区别传统MVC分为Model、View、Controller:Model:负责数据存储和数据库交互View:负责页面展示Controller:负责接收请求、处理业务逻辑、调度Model和ViewDjango的MTV是对MVC的微调,核心逻辑一致,只是命名和分工略有区别:Model:和MVC一致,负责数据库模型、数据增删改查Template:对应MVC的View,专门负责页面HTML渲染、数据展示View:对应MVC的Controller,核心负责接收请求、处理业务逻辑、返回响应简单总结:Django没有单独的控制器,视图View承担了控制器的工作,模板单独负责展示,分层更纯粹。3.Django项目中app的作用,为什么要拆分多个app?app是Django项目的功能模块单元,一个Django项目可以包含多个app,每个app对应一套独立的功能、模型、视图、路由和模板。拆分多个app的核心原因:解耦分层:不同业务拆分不同app,比如用户模块、订单模块、商品模块,业务互不干扰。方便维护迭代:单一模块出问题不会影响整体项目,修改、新增功能只需要改动对应app。可复用性强:通用app(用户认证、日志记录)可以直接复用在其他Django项目中。结构清晰:避免所有代码堆积在一个文件,方便团队协作开发。4.Django项目核心配置文件有哪些?各自作用?settings.py:项目核心配置文件,配置数据库、注册app、中间件、静态文件、模板路径、权限配置、跨域配置等,是项目的核心配置入口。urls.py:主路由文件,负责全局URL分发,匹配用户请求路径,转发到对应视图函数或子路由。wsgi.py:WSGI服务部署文件,用于线上服务器启动项目,实现Web服务器和Django框架的对接。asgi.py:异步部署文件,支持异步请求、WebSocket、长连接等场景,适配高并发异步项目。manage.py:项目命令行工具,内置创建app、数据库迁移、创建超级用户、启动项目、清空数据等所有操作命令。二、路由与视图高频面试题1.Django路由匹配规则是什么?路由顺序有什么讲究?Django路由是从上到下依次匹配,匹配成功后直接执行对应视图,不会继续向下匹配。核心规则:路由匹配是模糊匹配,不是精准匹配,书写路由时建议末尾加/避免匹配混乱。精准路由要写在前面,通用路由、正则路由写在后面。如果自定义404路由,必须放在所有路由最后。错误示例:通用路由写在前面,会拦截所有后续请求,导致下方路由失效。2.Django路由传参有几种方式?分别说明一共有三种常用传参方式:位置参数传参(无名分组):用()截取URL中的参数,按位置顺序传递给视图函数,参数数量和顺序必须严格对应。关键字参数传参(有名分组):用<参数类型:参数名>定义参数,视图函数参数名必须和路由参数名一致,不受顺序限制,项目中最常用。路由默认参数:在路由中设置默认参数,视图函数无需必传,适配部分默认场景。3.简述Django请求生命周期(必考)用户发起请求到服务器返回响应的完整流程:用户通过浏览器发起HTTP请求,请求到达服务器。WSGI服务器接收请求,将请求封装成Django可识别的对象。请求依次经过所有中间件的请求预处理方法。路由层urls.py匹配请求路径,找到对应的视图函数。执行视图函数,可进行ORM数据库操作、业务逻辑处理。视图返回HttpResponse、render或redirect响应对象。响应依次经过所有中间件的响应后置处理方法。WSGI服务器将响应返回给浏览器,页面渲染完成。4.GET和POST请求的区别,Django中如何获取请求参数?GET和POST核心区别:GET:参数拼接在URL地址栏,明文展示,有长度限制,可缓存、可收藏,一般用于查询数据。POST:参数放在请求体中,无明文展示,无长度限制,不缓存,安全性更高,一般用于新增、修改、提交数据。Django获取参数方式:GET参数:request.GET.get('参数名')POST参数:request.POST.get('参数名')文件参数:request.FILES.get('文件字段')推荐使用get方法取值,避免参数不存在直接报错,提升代码健壮性。三、ORM数据库核心面试题1.什么是ORM?DjangoORM的优缺点ORM即对象关系映射,Django通过模型类和数据库表做映射,无需手写SQL语句,通过操作Python对象即可实现数据库增删改查。优点:无需掌握复杂SQL,降低开发门槛,代码简洁易读。数据库解耦,支持无缝切换MySQL、PostgreSQL、SQLite等数据库,无需修改业务代码。自带数据校验、字段约束,减少数据异常问题。自带数据库迁移功能,方便版本迭代更新表结构。缺点:复杂多表联查、聚合查询,ORM效率低于原生SQL。部分复杂SQL语法ORM不支持,需要手写原生SQL。新手容易写出低效查询,产生大量冗余SQL,导致接口卡顿。2.Django数据库迁移命令原理,migrate和makemigrations区别makemigrations:检测app下models.py的表结构变化,生成迁移文件,记录字段新增、修改、删除等操作,不会操作真实数据库。migrate:读取迁移文件,将表结构变更同步到真实数据库,创建表、修改字段、更新约束。常见问题:迁移报错一般是字段冲突、数据不匹配、迁移文件混乱,解决方式通常是删除无效迁移文件、重置迁移记录。3.DjangoORM中外键关系有几种?各自使用场景一对多(ForeignKey):最常用,比如一个分类对应多个商品,外键写在多的一方(商品表)。一对一(OneToOneField):比如用户表和用户详情表,一一对应,数据唯一绑定。多对多(ManyToManyField):比如用户和角色、商品和标签,双向多关联,Django会自动生成中间关联表。4.解决ORM查询效率低的常用方法(高频)开发中最常见的问题是循环查询数据库导致的N+1查询问题,优化方案:select_related:针对一对多、一对一外键,连表查询,一次性查出关联数据,适用于外键正向查询。prefetch_related:针对多对多、一对多反向查询,批量预查询,避免循环查库。only/defer:only只查询需要的字段,defer排除不需要的字段,减少数据传输。索引优化:查询频率高的字段设置db_index索引,加快检索速度。分页查询:避免一次性查询全量数据,使用Paginator分页加载。原生SQL:超复杂查询放弃ORM,使用raw或execute_sql执行原生SQL。5.Q查询和F查询的作用F查询:基于数据库字段本身运算,适用于字段自增、自减,避免读取数据再修改的并发问题,保证数据一致性。比如商品销量+1、积分抵扣。Q查询:实现复杂的多条件查询,支持与、或、非逻辑(&、|、~),解决传统filter无法实现的复杂筛选场景。四、中间件与信号面试题1.Django中间件是什么?有什么作用?常用场景中间件是Django请求生命周期中的全局钩子,是介于请求和视图之间的一层拦截器,全局生效,用于统一处理所有请求和响应。五大核心方法:process_request:请求进入视图前执行process_view:视图执行前执行process_template_response:模板渲染前执行process_response:响应返回前端前执行process_exception:视图报错时触发异常处理常用场景:全局登录校验、接口频率限制、请求日志记录、跨域处理、统一响应格式、异常捕获。2.中间件执行顺序请求阶段:从上到下依次执行所有中间件的process_request、process_view响应阶段:从下到上依次执行所有中间件的process_response异常阶段:视图报错后,反向执行中间件异常处理3.Django信号的作用和常用信号信号是Django的解耦机制,用于在特定事件触发时自动执行自定义逻辑,无需修改原有业务代码,实现功能解耦。常用内置信号:pre_save/post_save:模型保存前/保存后触发pre_delete/post_delete:模型删除前/删除后触发m2m_changed:多对多字段变更触发request_started/request_finished:请求开始/结束触发使用场景:用户注册后自动创建用户详情、订单生成后发送消息、数据变更记录日志。五、前后端分离与接口开发1.Django和DjangoRESTFramework的关系原生Django主打模板渲染,适合传统前后端不分离项目;DRF是基于Django的第三方接口开发框架,专门用于前后端分离项目,快速开发RESTful风格接口。DRF核心功能:序列化器、视图集、路由自动生成、权限校验、分页、过滤、接口文档、异常处理。2.DRF序列化器的作用序列化:将数据库模型对象转换成字典、JSON数据,返回给前端。反序列化:接收前端传来的JSON数据,校验数据合法性,转换成模型对象存入数据库。数据校验:自定义字段校验规则,拦截非法数据,保证数据安全。3.什么是RESTful接口规范是一套统一的接口设计规范,通过HTTP请求方式定义操作行为,URL定义资源,状态码定义结果:GET:查询资源POST:新增资源PUT:全量修改资源PATCH:局部修改资源DELETE:删除资源特点:URL名词化、无状态、统一返回格式、适配前后端分离开发。六、缓存、并发与安全1.Django缓存机制,常用缓存方案缓存用于减轻数据库压力,提升接口响应速度,将高频查询数据缓存到内存中。常用缓存方式:本地内存缓存:开发测试使用,重启项目缓存清空Redis缓存:线上项目主流方案,支持过期时间、持久化、高并发数据库缓存:适合小型项目,性能一般缓存使用场景:首页数据、分类数据、配置信息、高频查询接口。2.Django如何处理高并发?使用Redis缓存热点数据,减少数据库查询压力开启数据库连接池,优化数据库连接使用Gunicorn+Nginx部署,多进程、多线程提升并发能力异步任务拆分,耗时操作放入Celery异步队列数据库读写分离、分库分表应对大数据量3.Django常见安全机制CSRF防护:默认开启csrf中间件,拦截跨站请求伪造XSS防护:模板自动转义特殊字符,防止脚本注入SQL注入防护:ORM参数化查询,杜绝拼接SQL点击劫持防护:默认添加X-Frame-Options响应头密码加密存储:内置pbkdf2算法加密用户密码,不存明文七、项目部署与实战问题1.Django线上部署流程,常用部署组合主流部署架构:Nginx+Gunicorn+Django部署流程:服务器安装Python、MySQL、Redis、Nginx、Gunicorn环境上传项目代码,安装项目依赖配置settings线上环境(关闭debug、配置允许的域名、静态文件路径)执行数据库迁移,创建超级用户,收集静态文件配置Gunicorn,启动项目进程配置Nginx反向代理
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年甘肃能源化工投资集团有限公司招聘400人考试模拟试题及答案解析
- 2026年兴和县教师招聘考试参考题库及答案解析
- 中国兵器工业集团爱生集团(东莞)2026届校园招聘考试备考题库及答案解析
- 2026湖北武汉市公立小学招聘小学语文教师等岗位2人考试备考试题及答案解析
- 2026年9月吉木萨尔县公安局面向社会公开招聘警务辅助人员26人笔试模拟试题及答案解析
- 2026年彰武县教师招聘笔试参考题库及答案解析
- 2026重庆市红十字会医院下半年公开招聘88人 (第一批)考试备考试题及答案解析
- 2026贵州省交通运输厅所属事业单位秋季赴省外知名高校引才线上初评考试备考题库及答案解析
- 2026上海第二工业大学专职辅导员公开招聘(下半年)考试参考题库及答案解析
- 2026广东汕头市公安局澄海分局招聘警务辅助人员50人笔试参考题库及答案解析
- 《礼赞伟大祖国 争做时代少年-小学四年级国庆主题班会》
- 综合管理竞聘测试题及答案
- 湖北武汉市2026-2027学年高三年级上学期9月调研考试英语试卷
- 2026年部编版新教材道德与法治五年级上册全套教学设计(共4个单元有教学计划)
- 混凝土结构设计原理中国建筑工业出版社
- 人教版初中英语八年级上册第一单元完整教案
- 高考英语谓语与非谓语组合练100题(含答案)
- 国药数科2026届春季校园招聘建设笔试备考试题及答案解析
- 内分泌科护理服务质量管理标准
- 煤矿职业病危害培训课件
- 雨课堂在线学堂《大数据机器学习》作业单元考核答案
评论
0/150
提交评论