Как уведомить пользователей о новой записи в блоге через 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 🤷🏻♂️. У вас есть много вариантов, я привел несколько, которые мне нравятся:
- Каналы Django
- Стандартный микросервис с Websockets (мой выбор!)
- FCM сообщения данных (Firebase Cloud Messaging)
Websockets являются простыми и очень полезными в плане двунаправленной связи между клиентами и серверами. Если список функций вашего приложения будет расти, возможно, вам понадобятся дополнительные события в вашем приложении. WS поможет вам масштабироваться.
Redis - это хранилище ключевых значений, которое используется для кэширования или хранения данных, в качестве бэкенда очередей и т.д. Да, Django Channels использует Redis в бэкенде, но это может сбить с толку тем, что Redis создан для WebSockets =) Это не так 😀
Ознакомьтесь с WebSockets, они многократно помогут вам в вашей карьере разработчика.