【发布时间】:2019-05-01 13:53:22
【问题描述】:
我使用 Django Rest Framework 和 rest_auth(/login、/logout/、/register...) 我有一个中间件,通常由 user_logged_in 或 user_logged_out 信号触发。
在我的中间件中,我想使用来自 Rest 框架的 Response 对象。
我的中间件.py
from django.contrib.sessions.models import Session
from django.contrib.auth import logout
from django.contrib.auth.models import AnonymousUser
from rest_framework.response import Response
from rest_framework import status
class OneSessionPerUserMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
if request.user.is_authenticated:
if request.user.session_key != Session.objects.filter(session_key__in = request.user.session_key):
logout(request)
return Response(request)
return self.get_response(request)
我想我通过了我的条件,但我收到了这个错误:
The response content must be rendered before it can be accessed
如何在中间件中正确使用 API Response 对象?
而且我真的不明白什么是:self.get_response = get_response?
【问题讨论】:
-
只需删除您的
return Response(request)。让您的视图使用return self.get_response(request)处理请求。无论如何,您应该优雅地处理已注销的情况。 -
所以我不能使用默认的API显示来添加一些自定义消息“已经登录”,例如?
-
如果您真的想为中间件中的所有请求处理此问题,无论调用的 api 视图如何,请查看 Nafees 给出的答案。
标签: django django-rest-framework django-middleware