首页 > 其他分享 >django实现sse接口

django实现sse接口

时间:2024-10-14 16:24:19浏览次数:15  
标签:return stream StreamingHttpResponse 接口 django sse response

基于django来实现sse
最近在实现通过post调用三方的接口得到sse流数据,并且自己需要用拿到的数据用sse流在返回给前端

from rest_framework.views import APIView
from django.http import StreamingHttpResponse, JsonResponse

class ChatMessageViewSet(APIView):

    def post(self, request):
        """
        获取列表
        :param request:
        :return:
        """
        # 发送POST请求到第三方API,并开启流式响应
        try:
            response = requests.post(url, headers=headers, json=payload, stream=True)
            if response.status_code == 200:
                # 创建一个StreamingHttpResponse来逐块传递数据
                def stream_response(ai_answer_str: str):
                    for chunk in response.iter_lines():  # 使用iter_lines处理行
                        try:
                            yield f"{chunk}\n\n"  # 格式化为SSE事件
                        except json.JSONDecodeError as e:
                            print(2222, e)
                            # 如果解析 JSON 失败,直接发送原始数据
                            yield f"{chunk}\n\n"  # 格式化为SSE事件

                # 返回StreamingHttpResponse
                return StreamingHttpResponse(stream_response(), content_type='text/event-stream')

            else:
                # 如果请求失败,返回错误信息
                return JsonResponse({"code": 400, "message": response.json(), "data": {}}, status=200)
        except Exception as e:
            # 处理请求异常
            return JsonResponse({"code": 400, "message": str(e), "data": {}}, status=200)

这里必须注意的是 sse返回的格式,一定要是 (data: \n\n),开头是data冒号和两个空格,最后以两个换行结尾

标签:return,stream,StreamingHttpResponse,接口,django,sse,response
From: https://www.cnblogs.com/up-k/p/18464452

相关文章

  • 如何使用接口查询A股上市公司股价
    importtimeimportrequestsimportjson#Extraheaderstest_headers={'Content-Type':'application/json'}'''#SpecialNote:#GitHub:https://github.com/alltick/realtime-forex-crypto-stock-tick-finance-websoc......
  • 全网低价话费充值对接api接口如何选择对接平台?
    在选择对接全网低价话费充值API接口的平台时,你可以考虑以下几个关键因素来确保你选择的平台能够满足你的需求:覆盖范围:确保平台支持三大运营商(移动、联通、电信)的话费充值服务,以便能够覆盖所有用户的需求。接口稳定性:选择一个提供稳定服务的平台,这通常可以通过查看用户评价、......
  • jar包内替换依赖jar后无法启动,错误日志:It has been compressed and nested jar files
    jar包内替换依赖jar后无法启动,错误日志:Ithasbeencompressedandnestedjarfilesmustbestoredwithoutcompression.ruoyi、springboot、java、jar、libs、压缩背景某服务jar包足足90MB有余,远程传输太慢,目前在改动的是其中的某子jar(项目内部依赖,另一个jar)。之前......
  • 初学Java基础Day18---面相对象之抽象类及其抽象方法,接口的使用及其面试题
    一,抽象类及其抽象方法的使用1.抽象方法:没有代码块,使用abstract修饰的方法,交给非抽象子类去实现注意:抽象方法必须在抽象类中。2.抽象类:使用abstract修饰3.代码实现://抽象类publicabstractclassPerson{//抽象方法publicabstractvoideat();}//在......