我被困在django中,如果有人可以帮助我,我将不胜感激。
我需要有一个第三方API的入口点。所以我创建了一个视图,并用@csrf_exempt
装饰了它现在问题是我无法访问之前设置的任何会话变量。编辑-我设置了多个会话变量,例如用户电子邮件,以了解用户是否已经登录。我能够在调用第三方API之前使用该会话。当第三方API发送响应时,他们不发送CSRF令牌,因此我已将该视图从csrf中排除。收到有效回复后,我想更新数据库。为此,我需要知道丢失的用户的电子邮件ID,因为我已经没有会话变量了。
ppConfirmPaymentProcess
是另一个处理由该第三方API发送的POST数据的函数。一切正常,csrf_exempt也正常工作,但是我无法对此请求执行request.session["foo"]
。有人可以帮忙吗?
@csrf_exempt
def ppConfirmPayment(request):
print(request.session, "=======================================")
for key, value in request.session.items():
print('{} => {}'.format(key, value))
return ppConfirmPaymentProcess(request)
request.session将始终为空,因为它只能由您的系统初始化,并且一旦关闭连接,该会话将被销毁。对于新连接,设置了新会话。由于您的API端点是直接由第三方API触发的,而不会触发任何其他端点,因此第三方无法设置会话。因此,request.session为空。
尝试将信息存储在request.POST
中,而不是request.session中,这是从第三方获取信息的最佳方式。
第三方API可能未以登录用户身份发送响应,并且肯定不是以发起事务的用户身份发送响应。
您可能必须在数据库中跟踪对API发出的请求以及与之关联的用户。从API获得响应后,您需要将其与这些记录进行匹配,加载相关用户的信息并进行适当的更新。
第三方API的响应与用户会话完全分开;这意味着它可能会在单独的线程,进程甚至服务器中进行处理(取决于您的网站设置方式),因此您需要使用某种跨越这些界限的机制,以便让用户了解付款的结果(这意味着数据库或为此设置的其他内容)。