Django 面试手册
Tue Mar 11 2025
2041 字 · 11 分钟

Django 面试手册


什么是 Django?它的优势是什么? Link to 什么是 Django?它的优势是什么?

Django 是一个基于 Python 的高级 Web 框架,旨在快速开发安全、可维护的 Web 应用程序。 它遵循了 “Don’t Repeat Yourself” (DRY) 和 “Convention Over Configuration” 的原则。

优势:

  • 快速开发: Django 的设计使得开发者可以快速构建和部署应用程序。
  • 内置功能: Django 提供了大量开箱即用的功能,如认证系统、ORM、表单处理等。
  • 安全性: Django 默认提供了防止常见安全问题的机制,如 SQL 注入、跨站请求伪造(CSRF)、跨站脚本(XSS)等。
  • 强大的社区支持: Django 拥有一个活跃的开发者社区,提供了丰富的第三方包和扩展。

解释 Django 的 MVT 模式 Link to 解释 Django 的 MVT 模式

MVT(Model-View-Template)是 Django 框架的设计模式。

  • Model: 处理与数据库的交互,定义数据的结构(如表结构)。
  • View: 处理业务逻辑,接收请求,调用模型并渲染模板。
  • Template: 负责用户界面的展示,使用 Django 的模板语言动态生成 HTML。

Django 的 ORM 是如何工作的? Link to Django 的 ORM 是如何工作的?

Django 的 ORM(对象关系映射)允许开发者使用 Python 对象操作数据库,而不需要编写 SQL 语句。 模型类定义了数据库表的结构,并通过类的实例与数据库交互。 示例:

PYTHON
1
2
3
4
from django.db import models

class Author(models.Model):
    name = models.CharField(max_length=100)
    birth_date = models.DateField()

Django 中的 Middleware 是什么? Link to Django 中的 Middleware 是什么?

Middleware 是 Django 处理请求和响应的中间层组件。它们可以在请求到达视图之前或响应返回客户端之前对其进行处理。

常见 Middleware:

  • AuthenticationMiddleware: 用于关联用户与请求。
  • SessionMiddleware: 管理会话数据。
  • CSRFViewMiddleware: 防止跨站请求伪造。

如何使用 Django 的 Admin 界面? Link to 如何使用 Django 的 Admin 界面?

Django 提供了一个自动生成的 Admin 界面,便于管理应用中的数据模型。

启用步骤:

  1. 注册模型到 admin 界面:
PYTHON
1
from django.contrib import admin from .models import Author
admin.site.register(Author) 
  1. 访问/admin/` 路径,使用管理员账户登录即可管理数据库中的数据。

如何在 Django 中创建和应用数据库迁移? Link to 如何在 Django 中创建和应用数据库迁移?

Django 使用迁移来管理数据库模式的变更。

基本步骤:

  1. 创建迁移:
BASH
python manage.py makemigrations 
  1. 应用迁移:
BASH
python manage.py migrate

Django 的 URL 路由是如何工作的? Link to Django 的 URL 路由是如何工作的?

Django 的 URL 路由系统通过将 URL 模式映射到视图函数来处理请求。

PYTHON
1
2
3
4
5
from django.urls import path
from . import views

urlpatterns = [
    path('home/', views.home_view, name='home'),
]

如何在 Django 中处理静态文件和媒体文件? Link to 如何在 Django 中处理静态文件和媒体文件?

  • 静态文件: 用于保存 CSS、JavaScript、图片等前端文件,使用 STATICFILES_DIRS 和 STATIC_ROOT 进行配置。
  • 媒体文件: 保存用户上传的文件,使用 MEDIA_URL 和 MEDIA_ROOT 进行配置。

Django 中的 signals 是什么?如何使用? Link to Django 中的 signals 是什么?如何使用?

Signals 是 Django 中的一种机制,用于在特定事件发生时触发特定的操作。

常用 signals:

  • pre_save 和 post_save:在模型实例保存前后触发。
  • pre_delete 和 post_delete:在模型实例删除前后触发。

使用示例:

PYTHON
1
2
3
4
5
6
7
from django.db.models.signals import post_save
from django.dispatch import receiver
from .models import UserProfile

@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
    if created:
        UserProfile.objects.create(user=instance)

Django 中的 ForeignKey、OneToOneField 和 ManyToManyField 有什么区别? Link to Django 中的 ForeignKey、OneToOneField 和 ManyToManyField 有什么区别?

  • ForeignKey: 多对一关系。例如,每个图书属于一个作者。
  • OneToOneField: 一对一关系。例如,每个用户有且只有一个用户档案。
  • ManyToManyField: 多对多关系。例如,学生和课程之间的关系。

如何优化 Django 的查询性能? Link to 如何优化 Django 的查询性能?

优化 Django 查询性能的方法包括:

  • 使用 select_related() 和 prefetch_related(): 进行关联查询优化。
  • 使用 only() 和 defer(): 只查询需要的字段。
  • 使用数据库索引: 在常用查询字段上添加索引。

如何在 Django 中实现权限控制? Link to 如何在 Django 中实现权限控制?

Django 提供了一个内置的权限系统,允许为用户或用户组分配权限。 示例:

PYTHON
1
2
3
4
5
6
7
8
9
from django.contrib.auth.models import User, Permission

# 分配权限
user = User.objects.get(username='john')
permission = Permission.objects.get(codename='can_edit')
user.user_permissions.add(permission)

# 检查权限
if user.has_perm('app_name.can_edit'):
    # 用户有该权限

Django 中的表单处理机制是怎样的? Link to Django 中的表单处理机制是怎样的?

Django 提供了 forms 模块来处理表单验证和数据清理。表单可以通过 Django 提供的表单类来定义,并在视图中进行处理。

示例:

PYTHON
1
2
3
4
5
6
7
8
9
10
11
12
from django import forms

class ContactForm(forms.Form):
    name = forms.CharField(max_length=100)
    email = forms.EmailField()

# 在视图中处理表单
def contact_view(request):
    if request.method == 'POST':
        form = ContactForm(request.POST)
        if form.is_valid():
            # 处理表单数据
            pass

如何在 Django 中实现缓存机制? Link to 如何在 Django 中实现缓存机制?

Django 提供了多种缓存机制,可以配置内存缓存、文件缓存或数据库缓存。 配置示例:

PYTHON
1
2
3
4
5
CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': '127.0.0.1:11211',
    }
}

使用缓存:

PYTHON
1
2
3
4
from django.views.decorators.cache import cache_page

@cache_page(60 * 15)  # 缓存视图 15 分钟
def my_view(request):
    ...

如何在 Django 中处理异步任务? Link to 如何在 Django 中处理异步任务?

Django 通常与 Celery 搭配使用来处理异步任务。

基本步骤:

  1. 安装 Celery:
BASH
pip install celery 
  1. 配置 Celery:
PYTHON
1
2
# project/celery.py from celery import Celery
app = Celery('project_name', broker='redis://localhost:6379/0')
  1. 定义任务:
PYTHON
1
2
python from celery import shared_task

@shared_task def my_task(): ... 

如何在 Django 中实现 REST API? Link to 如何在 Django 中实现 REST API?

Django REST Framework (DRF) 是 Django 中构建 REST API 的工具。

基本组件:

  • Serializer: 处理数据序列化和反序列化。
  • ViewSet: 处理 API 视图逻辑。
  • Router: 自动生成 URL 路由。

示例:

PYTHON
1
2
3
4
5
6
7
8
9
10
from rest_framework import serializers, viewsets
from .models import MyModel

class MyModelSerializer(serializers.ModelSerializer):
    class Meta:
        model = MyModel
        fields = '__all__'

class MyModelViewSet(viewsets.ModelViewSet):
    queryset = MyModel.objects.all()
    serializer_class = MyModelSerializer

如何在 Django 中进行单元测试? Link to 如何在 Django 中进行单元测试?

Django 内置了一个测试框架,基于 Python 的 unittest 模块。

示例:

PYTHON
1
2
3
4
5
6
7
8
9
from django.test import TestCase
from .models import MyModel

class MyModelTestCase(TestCase):
    def setUp(self):
        MyModel.objects.create(name='Test')

    def test_model_creation(self):
        obj = MyModel.objects.get(name='Test')
        self.assertEqual(obj.name, 'Test')

Django 面试手册

Tue Mar 11 2025
2041 字 · 11 分钟

What do you think?
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v3.5.6