
什么是 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 语句。 模型类定义了数据库表的结构,并通过类的实例与数据库交互。 示例:
1234
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 界面,便于管理应用中的数据模型。
启用步骤:
- 注册模型到 admin 界面:
1
from django.contrib import admin from .models import Author
admin.site.register(Author)
- 访问/admin/` 路径,使用管理员账户登录即可管理数据库中的数据。
如何在 Django 中创建和应用数据库迁移? Link to 如何在 Django 中创建和应用数据库迁移?
Django 使用迁移来管理数据库模式的变更。
基本步骤:
- 创建迁移:
python manage.py makemigrations
- 应用迁移:
python manage.py migrate
Django 的 URL 路由是如何工作的? Link to Django 的 URL 路由是如何工作的?
Django 的 URL 路由系统通过将 URL 模式映射到视图函数来处理请求。
12345
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:在模型实例删除前后触发。
使用示例:
1234567
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 提供了一个内置的权限系统,允许为用户或用户组分配权限。 示例:
123456789
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 提供的表单类来定义,并在视图中进行处理。
示例:
123456789101112
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 提供了多种缓存机制,可以配置内存缓存、文件缓存或数据库缓存。 配置示例:
12345
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211',
}
}
使用缓存:
1234
from django.views.decorators.cache import cache_page
@cache_page(60 * 15) # 缓存视图 15 分钟
def my_view(request):
...
如何在 Django 中处理异步任务? Link to 如何在 Django 中处理异步任务?
Django 通常与 Celery 搭配使用来处理异步任务。
基本步骤:
- 安装 Celery:
pip install celery
- 配置 Celery:
12
# project/celery.py from celery import Celery
app = Celery('project_name', broker='redis://localhost:6379/0')
- 定义任务:
12
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 路由。
示例:
12345678910
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 模块。
示例:
123456789
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')
Preview: