gpt4 book ai didi

django - Django Rest APIClient 类是否发出实际请求?

转载 作者:行者123 更新时间:2023-12-03 23:56:29 27 4
gpt4 key购买 nike

我想知道请求是否实际上是通过 http 发出的。在我的应用程序中,我有一个看起来像的测试

class Authenticate(APITestCase):

def setUp(self):
self.client = APIClient()
self.password_for_admin = '123456'
self.admin = User.objects.create_superuser(username='myname', email='email@email.com', password='123456')
self.token = Token.objects.create(user=self.admin)

def test_authenticate(self):
""" comment """
self.client.credentials(HTTP_AUTHORIZATION='Basic ' + base64.b64encode('{}:{}'.format(self.admin.username, self.password_for_admin)))
response = self.client.post('/api/authenticate/')
print response

在我看来我有:

@api_view(('POST',))
def authenticate(request, format=None):
""" comment """
import pprint
log.debug(pprint.pprint(request))

try:
"asdlfjl"
except Exception, e:
response = "An error occurred, {}".format(e)
return Response(response)

我的设置如下:

INSTALLED_APPS = (
...
'django.contrib.sessions',
)

MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
...
)

请求在我的日志文件中被打印为无。我需要参加 session 。我尝试了 request.session(没有),这就是我提出这个问题的原因。

最佳答案

我想通了。服务器确实使用 testserver 域发送请求。这是一个误导性的问题,代码是错误的。当用户到达此 View 方法时,他们已经使用其余基本后端进行了身份验证。

通过大量研究,我发现用户正在通过 rest 进行身份验证,但 rest 后端不会调用登录方法。由于不会从休息后端调用登录,因此 session 永远不会附加到请求。我将身份验证方法更改为登录,并通过执行以下操作简单地调用了登录:

...

@api_view(('POST',))
def login(request, format=None):
try:
from django.contrib.auth import login
if request.user and request.user.is_active:
login(request, request.user)
...
response = ...
else:
response = {}
except Exception, e:
response = "An error occurred, {}".format(e)
return Response(response)

关于django - Django Rest APIClient 类是否发出实际请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26224850/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com