Передача данных только при POST-запросе с помощью dJango SSE Server Side Events
Я пытаюсь транслировать SSE всем клиентам, как только пользователь делает запрос.
Мне удалось запустить этот базовый пример
async def dashboard_oc_interface(request):
"""
Sends server-sent events to the client.
"""
async def event_stream():
i = 0
while True:
# yield {'id' : random.randint(0, 99) , 'status' : 'success'}
yield f'data: {random.choice(range(1,40))},SUCCESS\n\n'
await asyncio.sleep(100)
return StreamingHttpResponse(event_stream(), content_type='text/event-stream')
Но я не знаю, как сделать это ниже:
# user will be making this request
def post_request(request):
success = random.choice([True, False]) # NOT ACTUAL LOGIC
return JsonResponse ({'success' : success })
# I would like to stream the success data from above
async def stream():
# HOW CAN I STREAM ONLY WHEN post request
# we will listen here
async def event_stream(request):
return StreamingHttpResponse(stream(), content_type='text/event-stream')
async def dashboard_oc_interface(request):
"""
Sends server-sent events to the client.
"""
async def event_stream():
i = 0
while True:
# yield {'id' : random.randint(0, 99) , 'status' : 'success'}
yield f'data: {random.choice(range(1,40))},SUCCESS\n\n'
await asyncio.sleep(100)
return StreamingHttpResponse(event_stream(), content_type='text/event-stream')
вы можете использовать декоратор метода запроса.
from django.views.decorators.http import require_http_methods
@require_http_methods(["GET", "POST"])
def my_view(request):
# I can assume now that only GET or POST requests make it this far
# ...
pass
https://docs.djangoproject.com/en/5.0/topics/http/decorators/