from django.shortcuts import render
from django.views.generic.base import View
from datetime import datetime
from django.http import HttpResponse
from .models import Cschat
from tools.cschat_aliyun import AliyunCschat
from django.views.decorators.csrf import csrf_exempt
import json,time
class CschatView(View):
def get(self,request):
return render(request,'cschat.html')
def post(self,request):
content = request.POST.get("content","")
result = AliyunCschat(content).hash_result()
time.sleep(2)
with open('aliyun.json','rb') as f:
d = json.loads(f.read())
return render(request,'cschat_result.html',{
"contents":d
})
class AliyunCallbackView(View):
@csrf_exempt
def post(self,request):
postbody = request.body
with open('aliyun.json','wb') as f:
f.write(postbody)
return HttpResponse(str(postbody))
def get(self,request):
return render(request,'aliyun_callback.html',{
"text":"没有结果"
})
应用场景:给阿里云的接口发送POST请求后 阿里云不会直接返回数据 而是把数据返回到另外一个接口(class AliyunCallbackView(View)这个对应的url),我需要在给阿里云发送POST请求后从另一个接口读取阿里云返回的POST数据。
代码中
result = AliyunCschat(content).hash_result()
这一行执行是给阿里云的接口发送POST请求 我现在的写法很有问题,因为没有好的解决办法。 我的做法是把AliyunCallbackView接收到的阿里云POST返回的数据写到aliyun.json这个文件里面,然后等待2秒钟后读取aliyun.json里面的内容,再把结果返回给前端。这样写的问题很多,如果AliyunCallbackView在一秒内接收到多个返回数据,那后面的执行内容就全变了。可以把阿里云POST返回的数据写入数据库,然后使用时间戳查询数据库返回对应的值。这种办法虽然可行但是感觉太麻烦了,请问有什么更好的解决办法?
遇到了同样的问题,在CSDN看到了,希望阿里云团队能够给出正确、标准的答案~请查看
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。