测试注释功能显示样式
shortcode


中间件
中间件是Django请求/响应处理的钩子框架。它是一个轻量级、低级别的插件系统,用于全局改变Django的输入或输出。
自定义中间件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| class RequestLoggingMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
# 请求前处理
print(f"Request: {request.method} {request.path}")
response = self.get_response(request)
# 请求后处理
print(f"Response status: {response.status_code}")
return response
|
中间件注册
在settings.py中注册中间件:
1
2
3
4
| MIDDLEWARE = [
# 其他中间件
'yourapp.middleware.RequestLoggingMiddleware',
]
|
信号
Django信号允许解耦的应用在框架的其他地方发生操作时得到通知。
内置信号
1
2
3
4
5
6
7
8
| from django.db.models.signals import post_save
from django.dispatch import receiver
from django.contrib.auth.models import User
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
UserProfile.objects.create(user=instance)
|
自定义信号
1
2
3
4
5
6
7
8
9
10
11
12
13
| from django.dispatch import Signal
# 定义信号
order_created = Signal()
# 发送信号
order_created.send(sender=self.__class__, order=order)
# 接收信号
@receiver(order_created)
def handle_order_created(sender, order, **kwargs):
# 处理订单创建事件
pass
|
缓存
缓存可以显著提高Django应用的性能。Django支持多种缓存后端。
缓存配置
1
2
3
4
5
6
| CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.redis.RedisCache',
'LOCATION': 'redis://localhost:6379/1',
}
}
|
视图缓存
1
2
3
4
5
6
| from django.views.decorators.cache import cache_page
@cache_page(60 * 15) # 缓存15分钟
def my_view(request):
# 视图逻辑
pass
|
Celery异步任务
Celery是一个强大的分布式任务队列,可以用于处理异步任务。
配置Celery
1
2
3
4
5
6
| # celery.py
from celery import Celery
app = Celery('myproject')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
|
创建任务
1
2
3
4
5
6
7
| # tasks.py
from celery import shared_task
@shared_task
def send_email_task(subject, message, recipient_list):
# 发送邮件逻辑
pass
|
调用任务
1
2
3
| from myapp.tasks import send_email_task
send_email_task.delay('Subject', 'Message', ['user@example.com'])
|
Django REST Framework
Django REST Framework(DRF)是一个功能强大的工具包,用于构建Web API。
序列化器
1
2
3
4
5
6
7
| from rest_framework import serializers
from .models import Post
class PostSerializer(serializers.ModelSerializer):
class Meta:
model = Post
fields = ['id', 'title', 'content', 'created_at']
|
视图集
1
2
3
4
5
6
7
| from rest_framework import viewsets
from .models import Post
from .serializers import PostSerializer
class PostViewSet(viewsets.ModelViewSet):
queryset = Post.objects.all()
serializer_class = PostSerializer
|
路由
1
2
3
4
5
6
7
8
9
10
| from rest_framework.routers import DefaultRouter
from .views import PostViewSet
router = DefaultRouter()
router.register(r'posts', PostViewSet)
urlpatterns = [
# 其他路由
path('api/', include(router.urls)),
]
|
性能优化
数据库查询优化
使用select_related和prefetch_related减少数据库查询:
1
2
3
4
5
6
7
| # 优化前
for comment in Comment.objects.all():
print(comment.post.title) # 每次循环都会执行一次查询
# 优化后
for comment in Comment.objects.select_related('post').all():
print(comment.post.title) # 只执行一次查询
|
使用索引
在模型字段上添加索引:
1
2
3
4
| class Post(models.Model):
title = models.CharField(max_length=100)
slug = models.SlugField(unique=True, db_index=True)
created_at = models.DateTimeField(db_index=True)
|
部署最佳实践
- 使用Gunicorn或uWSGI作为WSGI服务器
- 使用Nginx作为反向代理
- 配置HTTPS
- 使用环境变量存储敏感信息
- 设置适当的日志级别
- 定期备份数据库
Django高级特性总结
- 中间件:全局处理请求/响应
- 信号:解耦应用组件
- 缓存:提高应用性能
- Celery:处理异步任务
- Django REST Framework:构建API
- 性能优化:数据库查询、索引等
- 部署最佳实践
结语
Django的高级特性为我们提供了强大的工具,可以构建复杂的Web应用。通过学习和掌握这些特性,我们可以开发出更高效、更可维护的应用。
在实际项目中,我们应该根据需求合理选择和使用这些特性,避免过度设计。始终记住,简单性和可维护性是衡量一个好的Web应用的重要标准。