middleware.py 1.2 KB

1234567891011121314151617181920212223242526272829303132
  1. # middleware.py
  2. from django.contrib.sessions.backends.db import SessionStore
  3. from rest_framework.authtoken.models import Token
  4. class TokenSessionMiddleware:
  5. def __init__(self, get_response):
  6. self.get_response = get_response
  7. def __call__(self, request):
  8. # 在请求处理前绑定 Session
  9. if 'Authorization' in request.headers:
  10. auth_header = request.headers['Authorization']
  11. if auth_header.startswith('Token '):
  12. token_key = auth_header.split(' ')[1]
  13. try:
  14. user = Token.objects.get(key=token_key).user
  15. if user.session_key:
  16. # 创建 Session 实例并加载数据
  17. session = SessionStore(session_key=user.session_key)
  18. session.load()
  19. request.session = session
  20. except (Token.DoesNotExist, AttributeError):
  21. pass
  22. # 继续处理请求(包括视图函数)
  23. response = self.get_response(request)
  24. # 响应阶段可选的保存逻辑
  25. if hasattr(request, 'session') and request.session.modified:
  26. request.session.save()
  27. return response