1. Django 和 Tornado 的关系
Django 是一个功能强大、全面且高度规范化的 Web 框架,它提供了丰富的内置功能和工具,适合构建复杂的 Web 应用。注重快速开发、代码组织和安全性。
Tornado 则是一个注重高性能和异步处理的 Web 框架。它特别适合处理高并发和实时性要求较高的场景。
两者有着不同的特点和适用场景,并非直接竞争关系,而是可以根据项目需求进行选择。
2. Django 请求的生命周期
大致流程如下:
- 用户发起请求。
- 网络将请求传递到服务器。
- 服务器通过路由规则匹配到对应的视图函数。
- 视图函数进行业务逻辑处理,可能与模型交互获取或操作数据。
- 视图函数返回响应内容。
- 响应经过一系列中间件的处理,如添加头信息、处理异常等。
- 最终将响应返回给用户。
3. Django 的内置组件
- 模型(Model):用于定义数据结构和与数据库的交互。
- 视图(View):处理请求并生成响应。
- 模板(Template):用于将数据渲染成 HTML 页面。
- 路由(URLconf):将 URL 映射到视图函数。
- 表单(Form):用于创建和处理表单数据。
- 管理后台(Admin):提供便捷的后台管理界面。
4. Django 中间件的 5 个方法及应用场景
5 个方法:
- process_request:在请求到达视图之前调用。
- process_view:在视图函数执行之前调用。
- process_exception:当视图中发生异常时调用。
- process_response:在视图返回响应后调用。
- init:中间件初始化时调用。
应用场景:
- 全局的请求预处理,如添加请求头。
- 权限验证。
- 日志记录。
- 异常处理和统一的错误响应。
5. Django 的 request 对象的创建时机
当请求到达服务器并被路由匹配到相应的视图时,Django 会创建 request 对象。
6. 在 CBV 添加装饰器的方法
可以直接在类方法上使用装饰器,或者使用 method_decorator
装饰器将函数装饰器转换为适用于类方法的装饰器。
7. Django ORM 中的方法
如 save
(保存模型实例)、get
(获取单个实例)、filter
(过滤查询)、exclude
(排除某些条件的查询)、update
(更新数据)等。
8. Django 框架中 select_related 和 prefetch_related 的区别
select_related
:通过 SQL 的 JOIN 操作在一次查询中关联相关模型的数据,减少数据库查询次数,但可能导致复杂查询。prefetch_related
:则是分别查询每个模型的数据,然后在 Python 中进行关联,适用于复杂关联关系。
9. 简述 django 中 csrf 的实现机制
当启用 CSRF 保护时,Django 会在表单中添加一个隐藏字段,其中包含一个随机生成的令牌。在服务器端,会验证提交的表单中该令牌是否正确,以防止跨站请求伪造。
10. Django 中如何实现 orm 表中添加数据时创建一条日志记录
可以在模型的 save
方法中添加创建日志记录的代码,或者通过信号机制,在数据保存时触发信号来处理日志记录。
11. Django 缓存设置
通过在 CACHES
配置中设置缓存后端、超时时间等参数来实现。
12. Django 的缓存能否使用 Redis 及配置
可以使用 Redis。需要安装相应的库,并在配置中指定 Redis 作为缓存后端,设置连接信息等。
13. 路由系统中 name 的作用
方便在模板和代码中通过名称来引用路由,而无需记住具体的 URL 路径。
14. Django Rest Framework 框架的组件
- 序列化器(Serializer):用于将模型数据转换为可序列化的格式。
- 视图集(ViewSet):集成了多种视图操作。
- 路由器(Router):自动生成 API 的路由。
15. 简述 Django Rest Framework 框架的认证流程
通常包括请求携带认证信息,框架对认证信息进行验证和处理,确定用户身份和权限。
16. Django、flask、tornado 框架的比较
- Django:功能全面、规范、适合大型项目。
- Flask:轻量级、灵活、适合小型项目或快速开发。
- Tornado:高性能、异步处理能力强,适合高并发场景。
17. Django orm 中如何设置读写分离
配置多个数据库连接,在代码中根据需要切换到读数据库或写数据库。
18. Django 框架中 F 和 Q 的作用
F
:用于在查询中对字段进行计算和比较等操作。Q
:用于构建复杂的查询条件。
19. Django 框架总 values 和 values_list 的区别
values
:返回包含字段值的字典列表。values_list
:返回包含字段值的列表列表。
20. Django 的 Form 和 ModeForm 的作用
Form
:用于创建和处理表单。ModeForm
:基于模型自动生成表单,方便与模型交互。
21. Django 的 Form 组件中,如果字段中包含 choices 参数的数据源实时更新的两种方式
- 动态设置
choices
属性。 - 使用信号来更新
choices
。
22. Django 的 Model 中的 ForeignKey 字段中的 on_delete 参数的作用
用于指定当关联的对象被删除时,本对象的处理方式,如 CASCADE
(级联删除)等。
23. Django 中 csrf 的实现机制
同问题 9。
24. Django 如何实现 websocket
可以使用 Django Channels
来实现 WebSocket 通信。
25. Django 中如何实现 orm 表中添加数据时创建一条日志记录
同问题 10。
26. Django 缓存设置
同问题 11。
27. Django 的模板中 filter 和 simple_tag 的区别
filter
:是简单的对变量进行处理的过滤器。simple_tag
:可以执行更复杂的逻辑和操作。
28. Django-debug-toolbar 的作用
用于在开发过程中提供调试信息、性能分析等,帮助开发者更好地调试和优化代码。
29. Django 中如何实现单元测试
编写测试类和测试方法,使用断言等方式验证代码的行为和结果。
30. Django 中如何根据数据库表生成 model 中的类
可以使用 inspectdb
命令根据现有数据库表自动生成模型类。
31. Django 的 contenttype 组件的作用
管理模型的类型信息,方便进行权限管理等操作。
32. 阐述为什么要使用 django rest framework 框架
提供了一套完善的工具和机制来构建 API,提高了开发效率,提供了序列化、认证、授权等功能,使 API 开发更加规范和便捷。
33. Django Rest Framework 框架的组件
同问题 14。
34. Django Rest Framework 框架中的视图都可以继承哪些类
可以继承 APIView
、ViewSet
等。
35. Django Rest Framework 如何实现的用户访问频率控制
可以通过中间件或使用第三方库来实现访问频率的限制和控制。
36. 简述 Django 中哪里用到了线程?哪里用到了协程?哪里用到了进程 ?
在一些异步任务处理中可能用到协程;在多进程部署中用到进程;线程可能在一些并发处理场景中使用。