开发者社区> 问答> 正文

django怎样在两个VIEWS之间传递数据

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看到了,希望阿里云团队能够给出正确、标准的答案~请查看

展开
收起
刘刚_ 2020-05-23 21:06:45 1022 0
0 条回答
写回答
取消 提交回答
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载