Я подключен к API, затем я сохраняю все данные, поступающие в мою БД, я уже настроил сигналы для post_save этой модели.
Как я могу отображать все новые данные в моем фиде без необходимости пользователей чтобы перезагрузить страницу?
Я создал планировщик с помощью apscheduler, который извлекает данные из API каждые c раз.
updater.py
from datetime import datetime
from apscheduler.schedulers.background import BackgroundScheduler
from news_updater import newsAPI
def start():
print('sched start')
scheduler = BackgroundScheduler()
scheduler.add_job(newsAPI.get_fxstreet_news, 'interval', minutes=1)
scheduler.start()
apps.py
from django.apps import AppConfig
class NewsFilterConfig(AppConfig):
name = 'news_filter'
def ready(self):
from news_updater import updater
updater.start()
, и я добавил это в свой models.py
from django.db.models.signals import post_save, pre_save
def save_article(sender, instance, **kwargs):
print('new article saved')
post_save.connect(save_article, sender=NewsArticles)
он уже печатает «новая статья сохранена» каждый раз, когда приходят новые данные.
У меня также есть настроенный канал и он подключен, но я не знаю, как собрать все вместе
consumer.py
import asyncio
import json
from channels.consumer import AsyncConsumer
from channels.db import database_sync_to_async
from .models import NewsArticles
class NewsArticlesConsumer(AsyncConsumer):
async def websocket_connect(self, event):
print('connected', event)
await self.send({
'type': 'websocket.accept'
})
latest_news_obj = await self.get_latest_news()
print(latest_news_obj)
await self.send({
'type': 'websocket.send',
'text': "hello world"
})
async def websocket_receive(self, event):
print('received', event)
async def websocket_disconnect(self, event):
print('disconnected', event)
@database_sync_to_async
def get_latest_news(self):
return NewsArticles.objects.filter(is_new=True)[0]