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

django实现sse接口

时间:2024-10-14 16:24:19浏览次数:8  
标签: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接口的平台时,你可以考虑以下几个关键因素来确保你选择的平台能够满足你的需求:覆盖范围:确保平台支持三大运营商(移动、联通、电信)的话费充值服务,以便能够覆盖所有用户的需求。接口稳定性:选择一个提供稳定服务的平台,这通常可以通过查看用户评价、......
  • Django后台任务调度
    目录1.Celery安装与使用:2.Django-Q特点:安装与使用:3.DjangoBackgroundTasks安装与使用:4.Django-Crontab安装与使用:总结Django提供了几种常用的后台任务调度和执行解决方案。你可以选择根据你的项目需求来实现后台任务,比如定时任务、延时任务、或队列任务。以下是一些常用的......
  • jar包内替换依赖jar后无法启动,错误日志:It has been compressed and nested jar files
    jar包内替换依赖jar后无法启动,错误日志:Ithasbeencompressedandnestedjarfilesmustbestoredwithoutcompression.ruoyi、springboot、java、jar、libs、压缩背景某服务jar包足足90MB有余,远程传输太慢,目前在改动的是其中的某子jar(项目内部依赖,另一个jar)。之前......
  • jar包内替换依赖jar后无法启动,错误日志:It has been compressed and nested jar files
    jar包内替换依赖jar后无法启动,错误日志:Ithasbeencompressedandnestedjarfilesmustbestoredwithoutcompression.ruoyi、springboot、java、jar、libs、压缩背景某服务jar包足足90MB有余,远程传输太慢,目前在改动的是其中的某子jar(项目内部依赖,另一个jar)。之前......
  • 通信工程学习:什么是SPI串行外设接口
    SPI:串行外设接口    SPI,即串行外设接口(SerialPeripheralInterface),是一种由Motorola公司首先在其MC68HCXX系列处理器上定义的同步串行接口技术。SPI接口主要用于微控制器(MCU)与外部设备之间的通信,如存储器、传感器、显示屏等。以下是关于SPI接口的详细介绍:一、SPI......
  • 初学Java基础Day18---面相对象之抽象类及其抽象方法,接口的使用及其面试题
    一,抽象类及其抽象方法的使用1.抽象方法:没有代码块,使用abstract修饰的方法,交给非抽象子类去实现注意:抽象方法必须在抽象类中。2.抽象类:使用abstract修饰3.代码实现://抽象类publicabstractclassPerson{//抽象方法publicabstractvoideat();}//在......
  • WebAssembly 基础以及结合其他编程语言
    0x00WebAssembly基础详情参考《WebAssembly|MDN》(1)概述WebAssembly简称WASM或WA,是一种新的编码方式,可以在现代的Web浏览器中运行可以通过编译器,把多种编程语言(如C/C++、C#、Go、Python、Rust、TypeScript等)编写的代码转化为WA,并在浏览器中使用特点:灵活度高......
  • 公司订餐系统小程序(Python+Django+lw+系统源码 +调试)
    摘  要随着我国经济的高速发展与人们生活水平的日益提高,人们对生活质量的追求也多种多样。尤其在人们生活节奏不断加快的当下,人们更趋向于足不出户解决生活上的问题,菜品信息展现了其蓬勃生命力和广阔的前景。与此同时,为解决用户需求,教室预约发展愈发多元化与网络化,与电子信......
  • 【开题报告】基于django+vue敬老院管理系统(论文+源码)计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着社会的快速发展和人口老龄化的加剧,敬老院作为老年人生活照护的重要场所,其管理效率和服务质量日益受到关注。传统的敬老院管理模式往往......