Как уведомить пользователей о новой записи в блоге через django?

Я создаю мобильное приложение, используя Django Rest Framework, Flutter и MongoDB. В этом приложении пользователи могут просматривать сообщения, опубликованные другими пользователями. В моем Django приложении нет никакой модели уведомлений (и, честно говоря, я не знаю, как ее использовать!). В Django я создал конечные точки для создания постов

@api_view(['POST'])
def createPost(request):
   code/logic...

, и для получения сообщений

class blogsViewSet(ModelViewSet):
    queryset = Posts.objects.all()
    serializer_class = PostSerializer
    pagination_class = pagination.CustomPagination
    
    def list(self, request, *args, **kwargs):
        uid = request.META.get('HTTP_DATA')
        context = {"user": uid}
        queryset = Posts.objects.all().order_by('postID')
        paginatedResult = self.paginate_queryset(queryset)
        serializer = self.get_serializer(paginatedResult, many=True, context= context)
        return Response(serializer.data)

Теперь в моем приложении, допустим, у меня есть два пользователя: Пользователь A, и Пользователь B. Теперь, если оба они используют приложение одновременно и пользователь A создает новое сообщение, я хочу, чтобы пользователь B получил уведомление и немедленно показал это новое сообщение, без необходимости пользователю B перезагружать страницу самостоятельно.

Теперь мой вопрос в том, могу ли я достичь этого, используя только канал Django, или мне нужно использовать Redis (или любой другой подобный сервис). Если да, то как?

Спасибо!

Первые вещи: это сложная тема. Поэтому здесь нет решения copy-paste 🤷🏻♂️. У вас есть много вариантов, я привел несколько, которые мне нравятся:

  1. Каналы Django
  2. Стандартный микросервис с Websockets (мой выбор!)
  3. FCM сообщения данных (Firebase Cloud Messaging)

Websockets являются простыми и очень полезными в плане двунаправленной связи между клиентами и серверами. Если список функций вашего приложения будет расти, возможно, вам понадобятся дополнительные события в вашем приложении. WS поможет вам масштабироваться.

Redis - это хранилище ключевых значений, которое используется для кэширования или хранения данных, в качестве бэкенда очередей и т.д. Да, Django Channels использует Redis в бэкенде, но это может сбить с толку тем, что Redis создан для WebSockets =) Это не так 😀

Ознакомьтесь с WebSockets, они многократно помогут вам в вашей карьере разработчика.

Вернуться на верх