Отправить данные из сигнала модели post_save для просмотра - PullRequest
0 голосов
/ 02 августа 2020

Я подключен к 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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...