前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django 面试题

Django 面试题

作者头像
somenzz
发布2021-03-10 14:25:43
1.5K0
发布2021-03-10 14:25:43
举报
文章被收录于专栏:Python七号Python七号

过完年后,就是春招了,是找工作的好时机,找工作或换工作的同学需要好好准备一下面试了,最近我精选了 10 个关于 Django 的面试题,如果要看更多面试题目,请在公众号后台回复「面试」获取。祝你新的一年,祝你找工作顺利、工作也顺利。

1. Django 这个名字的起源及它代表的含义?

2003 年的秋天,两位 Django 的主创人员在开始使用 Python 来满足新闻网站快速迭代开发的需求,在此过程中发现大量的代码可以复用从而减少工作量提高效率,于是就开发出一个可以填空的 Web 框架,于 2005 年开源,一度成为非常流行的框架。它的名字来源于比利时的吉普赛爵士吉他手 Django Reinhardt。Django 一词也是罗马语术语,含义是「我醒了」。Django 的主要目标是简化数据库驱动的网站的开发。Django 注重组件的重用性和“可插拔性”,敏捷开发和 DRY 法则(Don't Repeat Yourself)。

2. Django 的有哪些优点和缺点/Django的哪些特征是你喜欢的?

Django 是一个安全、快速、敏捷的 web 应用开发框架。

优点:

  • 大规模、丰富、活跃的开源社区支撑。有大量的第三方应用可以集成,用于满足项目的需求。
  • 成熟。Django 已经持续更新迭代十多年,增加了不少新功能并持续加固。
  • 集成后台管理。只需要轻松配置即可自动生成强大的后台管理页面,便于管理 web 应用。
  • 插件支持。允许工程师为应用增加不同的特性,留下足够多的空间来实现自定义功能。
  • 丰富的类库。丰富的类库可以很轻松地为应用增加新功能。
  • ORM。Django 的 ORM 让应用与数据的交互易如反掌。
  • 模板语法及表单类。
  • 国际化。
  • 会话、用户、权限管理。
  • 集成测试框架

每枚硬币都有两面,Django 也不例外。

缺点:

  • 大包大揽: 对于一些轻量级应用不需要的功能模块 Django 也包括了,不如 Flask 轻量。
  • 过度封装: 很多类和方法都封装了,直接使用比较简单,但改动起来就相对麻烦。
  • 性能劣势: 与 C, C++ 性能上相比,Django 性能稍低,这是 Python 的锅,其他基于 Python 的框架也会有这个问题。

3. 什么是 MTV 架构?

它是一种设计模式,包含三个元素:模型(Model 即 M),模板(Template 即 T)和视图(Views 即 V)。该模型可以访问数据并负责处理数据库。模板是管理界面的另一层(表示形式)。至于 View,它负责业务逻辑。它还与模型和模板交互。

4. Django 中 OneToOneField 和 ForeignKey 的差异?

ForeignKey 和 OneToOneField 是 Django fields 最常用的两个类型,在数据库中,ForeignKey 代表一种多对一的关系,映射为 Model 类时需要提供 on_delete 参数,表示删除一条记录时如何处理依赖这该记录的 Models 类。而 OneToOneField 代表一对一的关系,映射为 Models 类时只需要提供依赖的类即可。

5. 什么是 slug,怎么使用它?

slug 的目的是为了 url 更易读(易于 SEO),使用方法也简单,比如 urls.py 中

代码语言:javascript
复制
path('articles/<slug:slug>/', views.article_detail),

那么访问 url articles/building-a-django-site 便会执行视图函数 views.article_detail(request, slug="building-a-django-site").

6. 什么是 mixin?

它是在需要时添加到类中的功能包。实际使用中通过类的继承将功能添加到所需要的类中。在 Django 中,这些软件包用于基于类的视图中。当开发人员不需要大量功能或仅希望使用某些功能时,他们可以使用 mixin 将功能所需的部分注入到类中。

7. 什么是 views,怎么编写 views?

Views 是视图函数,存放主要的业务逻辑代码,是 urls 与 models 交互的桥梁,即用户请求与数据库交互的中间层,是 MVT 架构的 V。

Django 中有两种方法来编写 views,一是基于函数的视图,另一种是基于类的视图。函数类的视图会更简单一些,但可能需要写更多的视图函数,但是基于类的视图会更加灵活和复用,但是稍微复杂些。

8. 说一说 Django 中模型的继承?

类同于 Python 的类继承,Django 也有完善的继承机制。Django 中所有的模型都必须继承 django.db.models.Model 模型,不管是直接继承也好,还是间接继承也罢。你唯一需要决定的是,父模型是否是一个独立自主的,同样在数据库中创建数据表的模型,还是一个只用来保存子模型共有内容,并不实际创建数据表的抽象模型。

Django有三种继承的方式:

抽象基类:被用来继承的模型被称为 Abstract base classes,将子类共同的数据抽离出来,供子类继承重用,它不会创建实际的数据表;多表继承:Multi-table inheritance,每一个模型都有自己的数据库表,父子之间独立存在;代理模型:如果你只想修改模型的 Python 层面的行为,并不想改动模型的字段,可以使用代理模型。

9. 解释一下 django 的 session 框架?

Django 的会话框架能够在网站请求时存储和检索任意数据。session 数据保存在服务器端,将发送和接收 cookies 的过程抽象化,session 通过配置中间件来实现。

Django 默认的配置是激活 session 的,确保 settings.py 文件的配置项:MIDDLEWARE 中包含 django.contrib.sessions.middleware.SessionMiddleware,INSTALLED_APPS 中包含:django.contrib.sessions

session 的数据可以保存在

  • 数据库
  • 缓存
  • 文件
  • cookie

默认情况下,Django 将 session 数据保存在数据库中,如果要提升性能,可以将 session 保存在缓存中,设置好 CACHE 后,设置 SESSION_ENGINE 为 "django.contrib.sessions.backends.cache"。

10. django-admin.py makemessages 或 manage.py makemessages 做何用?

如果你的网站需要国际化,那么会用到这个命令,执行该命令后,Django 会在当前路径生成一个 message file,里面保存了该 web 项目需要被翻译的字符串。

为了使 Django 项目可以翻译,你需要在 Python 代码和模板中添加少量钩子。这些钩子被成为 translation strings 。它们告知 Django:如果在终端用户语言里,这个文本有对应的翻译,那么应该使用翻译。标记字符串是你的职责,系统只会翻译它知道的字符串。

然后 Django 提供工具将翻译字符串提取到 message file 中。这个文件让翻译者方便地提供翻译字符串。一旦翻译者填写了 message file ,就必须编译它。这个过程依赖 GNU gettext 工具集。

完成后,Django 会根据用户的语言偏好,使用每种可用语言对网页进行即时翻译。

Django 的国际化钩子默认是开启的,这意味着在框架的某些位置存在一些 i18n 相关的开销。如果你不使用国际化,你应该在配置文件里设置 USE_I18N = False 。然后 Django 将进行优化,以免加载国际化机制。

最后的话

以上 10 个问题是我认为比较有代表性的几个问题,如果需要更多的 Django 或 Python 相关面试题目,请在公众号后台回复「面试」获取。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-02-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python七号 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. Django 这个名字的起源及它代表的含义?
  • 2. Django 的有哪些优点和缺点/Django的哪些特征是你喜欢的?
  • 3. 什么是 MTV 架构?
  • 4. Django 中 OneToOneField 和 ForeignKey 的差异?
  • 5. 什么是 slug,怎么使用它?
  • 6. 什么是 mixin?
  • 7. 什么是 views,怎么编写 views?
  • 8. 说一说 Django 中模型的继承?
  • 9. 解释一下 django 的 session 框架?
  • 10. django-admin.py makemessages 或 manage.py makemessages 做何用?
  • 最后的话
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档