메모밍
Aiden's LAB
  • All Posts
    • Develop
      • Preferences
      • Linux & Ubuntu
      • Python
      • Web & Server
      • ML & DL
    • Notes
      • Diary
      • Books
      • Memo
      • Review
      • Tips

최근 글

  • [Slack Bot] Django에 슬렉봇 연결하기 (python sl⋯
    2022.03.17
  • [Django Channels] 실시간 채팅 구현하기 -2
    2022.03.17
  • [Django Channels] 실시간 채팅 구현하기 -1
    2022.03.16
  • [데이터사이언스] 데이터 전처리 대전
    2020.11.22
  • [리액트 서적] Learning React (러닝 리액트)
    2020.11.22
  • [딥러닝] 그로킹 딥러닝 :: 딥러닝 입문 추천 서적
    2020.03.20
  • [Babel] 초간단 바벨(Babel) 사용법
    2020.01.22
  • [Numpy] 파이썬 벡터 표현
    2020.01.20
  • [GITHUB] Git Branch(브랜치) 삭제하기 (Local / R⋯
    2020.01.18
  • [GITHUB] 원격 저장소의 Branch 가져오기
    2020.01.16
Theme Designed By 정상우
메모밍
[Django Channels] 실시간 채팅 구현하기 -2
Develop/Web & Server

[Django Channels] 실시간 채팅 구현하기 -2

2022. 3. 17. 00:35

Message Model 작성하기

이제 메시지를 저장해야 하므로 Model을 작성했다. 원래는 Single App으로 가고 싶었으나, Chat 정도는 분리하는 것이 좋다고 판단해서 앱을 분리했다.

from django.db import models
from django.utils.formats import localize
from rest_api.models import User, Study


class Message(models.Model):
    user = models.ForeignKey(to=User, on_delete=models.PROTECT)
    study = models.ForeignKey(to=Study, on_delete=models.PROTECT)
    content = models.TextField()
    on_created = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.user.username + " " + self.content + " " + localize(self.on_created)

 

Consumer 수정하기

그다음은 consumer.py에 간단히 함수를 작성하고 만들어둔 Message Model을 이용해서 데이터를 저장하게 해 줬다.

...
@database_sync_to_async
    def save_message(self, user_pk, study_pk, message, created_time):
        user = User.objects.get(pk=user_pk)
        study = Study.objects.get(pk=study_pk)
        Message.objects.create(
            user=user, study=study, content=message, on_created=created_time
        )
...

그 후 receive 메서드 내에서 호출하도록 작성해주고 나면 구현은 어렵지 않게 끝나게 된다.

...
async def receive(self, text_data):
...
    await self.save_message(
        user_pk=data_json["user_id"],
        study_pk=self.study_id,
        message=data_json["message"],
        created_time=now,
    )
...

실제로 Postman의 Websocket을 이용해서 테스트를 해보면, 아래와 같이 잘 동작하는 것을 볼 수 있고 

데이터베이스도 직접 열어보면 아래처럼 채팅 데이터가 잘 쌓이는 것을 확인할 수 있다. 여러 번 보내도 잘 쌓이는지 보기 위해 연속으로 보내봤는데, 잘 저장이 되는 것을 확인했다. 

 

그럼 이제 남은 건 해피엔딩일까

그럴 리 없다. 모든 채팅 데이터를 서버에 저장한다는 것이 있을 수 있는 일인가...! 모든 데이터를 모바일 로컬에 저장하고 서버는 단순히 중계하는 역할만 하도록 구현을 해야 한다. 하지만 일단 여기까지 해두고... 주말에 안드로이드 쪽을 담당해주는 멤버를 만나서 이야기해보고 다시 업데이트를 하려고 한다.

 

 

저작자표시
    'Develop/Web & Server' 카테고리의 다른 글
    • [Django Channels] 실시간 채팅 구현하기 -1
    • [Babel] 초간단 바벨(Babel) 사용법
    • [Django] 빨리 배워 빨리 써먹는 Django :: 설치부터 실행까지
    django, Django Channels, Django Channels Chat, Django 채팅, 장고 채팅
    메모밍
    메모밍
    :: Aiden Lim's LAB ::
    댓글쓰기
    다음 글
    [Slack Bot] Django에 슬렉봇 연결하기 (python slack bot)
    이전 글
    [Django Channels] 실시간 채팅 구현하기 -1
    • 이전
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • ···
    • 38
    • 다음

    티스토리툴바