묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결파이썬/장고로 웹채팅 서비스 만들기 (Feat. Channels) - 기본편
질문이 있습니다.
강사님 안녕하세요. 강의를 보다보면 배워야할 점이 많이 보입니다. - 채팅방 그룹 이름을 만들 때 staticmethod 장식자를 활용한다던지- 해당 강의에서 Room 모델 안에서 다른 필드와 섞이는 것을 방지하기 위해 별도의 추상화 클래스를 만든다던지파이썬의 고급 기술? 이라고 해야할까요? 이런 걸 잘 사용하려면 결국엔 의식적으로 사용하려고 하고 연습해야 할거 같은데 추천하시는 강의나 서적이 있을까요?
-
미해결파이썬/장고로 웹채팅 서비스 만들기 (Feat. Channels) - 기본편
구독 채팅 구현
우선 좋은 강의 감사합니다! 핵심만 빠르게 알려주셔서 도움이 많이 되는 강의라고 생각합니다. 다른 강의도 꼭 들어보려구요 🙂 현재 프로젝트에서 특정 인물에게 구독한 유저들만 특정인물과 채팅을 나눌 수 있는 기능을 구현중에 있습니다! 이런 기능 역시, 미들웨어를 사용하여 scope에 관련 값을 담아서 처리하면 될까요? 기능 구현 전에 선생님 강의를 통해 공부하고 있고, 시작 전 대략적으로 구상하는 단계여서 질문이 애매할 수 있는 점 양해 부탁드립니다
-
미해결ChatGPT 영어 상황극 채팅 서비스 만들기 (Feat. 파이썬/장고채널스)
5장에서 ASGI로 구동하기 중 daphne 적용 안됨
runserver 기본 설정을 WSGI에서 ASGI로 바꾸려고 강의 따라하는데, 오류가 나요 지금까지는 오류 없이 정상적으로 진행되었습니다
-
미해결파이썬/장고로 웹채팅 서비스 만들기 (Feat. Channels) - 기본편
헷갈려서 질문드립니다.
장고 채널스의 튜토리얼의 보고 도커 컴포즈로 레디스와 장고 서버를 연결 시켜주었습니다. 그런데 도커 환경에서도 redis 환경 변수 설정을 해주어야 하나요?
-
미해결ChatGPT 영어 상황극 채팅 서비스 만들기 (Feat. 파이썬/장고채널스)
명령행에서 음성으로 메세지 읽어주기 pygame 오류
settings에 pygame이 있어 연결된 거 같은데 실행이 안되는 것 같아요
-
미해결ChatGPT 영어 상황극 채팅 서비스 만들기 (Feat. 파이썬/장고채널스)
OpenAI API 활용목적 실습 진행하는데 오류가나요
(사진)
-
해결됨파이썬/장고로 웹채팅 서비스 만들기 (Feat. Channels) - 기본편
@login_required 장식자를 적용한후에는 로그인을 성공하면 채팅방으로 어떻게 이동을 하는 건가요?
로그인을 하고 난후에 디폴트 주소가 /acconts/profile/ 인데@login_required 장식자를 적용한후에는 로그인을 성공하면 채팅방으로 어떻게 이동을 하는 건가요?채팅창에 있다가 로그아웃 한후 다시 로그인을 하면 profile 페이지로 이동하는데 강의에서는 채팅창으로 리다이렉션이 되는 이유가 궁금합니다.
-
미해결파이썬/장고로 웹채팅 서비스 만들기 (Feat. Channels) - 기본편
docker run -d --restart always --name redis7 --publish 6379:6379 redis:7
docker --version Docker version 24.0.6, build ed223bc 으로 설치되어있는데 제목의 실행 명령어 수행시 docker run -d --restart always --name redis7 --publish 6379:6379 redis:7docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.See 'docker run --help'. 에러가 발생합니다
-
미해결ChatGPT 영어 상황극 채팅 서비스 만들기 (Feat. 파이썬/장고채널스)
웹소켓 통신과 비동기처리 개념에 관해 질문 드립니다~
안녕하세요~알차고 담백한 강의 만들어주셔서 감사합니다!보는 사람까지 코딩이 참 쉽게 느껴지게 만드는 선생님의 코딩 실력이 너무 부럽네요~! 강의에서 다루는 내용과 관련된 개념과 조언을 구하고 싶은 부분에 관해 질문 좀 드릴게요.먼저 개념 관련 질문부터 드릴게요. 강의를 따라가는 데는 전혀 문제가 없었지만 제가 비전공자이다 보니 아래와 같은 웹소켓과 비동기처리에 관한 기본적인 개념이 헷갈리더라고요. 웹소켓으로 통신하면 애초에 병렬 처리가 이루어지는 게 맞나요? 여러 사람이 동시에 이 상황극 서비스를 이용해도 각 이용자와 ChatGPT 간의 대화는 독립적으로 진행되고, 그러니 모델로부터 답변을 받는 데 걸리는 시간도 일반적으로 ChatGPT 이용할 때와 같은 게 맞나요?consumer에서 async def를 사용하는 경우는 해당 메소드 안에서 처리하는 작업 중에 동시 처리가 가능한 작업이 있을 때가 맞나요? 이 강의에서 consumer의 메소드를 def로 구성한 건 메소드 안에서 작업이 순차적으로 진행되기 때문에 굳이 async def를 사용할 필요가 없기 때문인 거죠? 이어서 제가 개인적으로 진행하고 있는 프로젝트 관련해서 조언 좀 부탁드릴게요.개인 프로젝트로 주문봇 서비스를 만드는 중이고, 주문봇 페이지, 커뮤니티 페이지 등으로 구성된 홈페이지를 개발해서 실제 서비스 운영까지 목표로 삼고 있습니다. 궁금한 점은, 가령 주문봇 애플리케이션, 리뷰 어플리케이션, 커뮤니티 어플리케이션 등으로 구성된 장고 프로젝트를 서로 다른 가게에서 독립적으로 사용할 수 있게 하려면 어떻게 해야 하나요? 제가 만들려는 서비스를 기반으로 각 가게에서 자신의 홈페이지를 운영하게 할 수 있는 방법으로는 무엇이 있는지 궁금합니다.제가 만들려는 서비스를 배포하고 운영하기 위해서 필요한 기술에 대해서도 알고 싶습니다. 장고와 리액트로 서비스를 구현하고 배포와 운영은 클라우드 서비스를 이용해야겠다 정도로만 생각하고 있는데, 필요한 기술 스택에 관한 큰 그림을 좀 더 명확하고 현실적으로 그리고 싶어 질문 드려 봅니다.
-
미해결ChatGPT 영어 상황극 채팅 서비스 만들기 (Feat. 파이썬/장고채널스)
브라우저에서 지원하는 Voices의 종류
「TTS 엔진을 통해 메시지를 음성으로 읽어주기」 파트 수업을 듣던 중, 강사님의 화면과 다르게 20개밖에 조회가 되지 않아서 그 이유가 궁금해 글을 남기게 되었습니다.
-
미해결
django channels 채팅 기능을 비동기 구현 시, 채팅방 종료 관련 문의입니다.
consumers.pyfrom django.contrib.auth.models import User from django.shortcuts import get_object_or_404 from channels.db import database_sync_to_async from channels.generic.websocket import AsyncJsonWebsocketConsumer from chat.models import Chat, Room class ChatConsumer(AsyncJsonWebsocketConsumer): def __init__(self): super().__init__() self.group_name = "" self.room = None # .. 생략 .. async def chat_room_delete(self, message_dict): print(message_dict, "chat_room_delete") custom_code = 4000 await self.close(code=custom_code) # .. 생략 .. 채팅방 삭제 요청 시, 실제 데이터를 삭제하는 것이 아니라 채팅방의 상태를 비활성화하도록 is_active=False로 변경처리하게 로직을 작성해놨습니다.그래서 아래와 같이 signal을 작성하였는데요.@receiver(post_save, sender=Room) def room_on_post_save(sender, instance, **kwargs): if instance.is_active: return print("동작여부 확인") channel_layer = get_channel_layer() print(channel_layer.__dict__) channel_layer.group_send( instance.chat_group_name, { "type": "chat.room.deleted", }, ) 삭제 시, 해당 함수가 실행되긴 하지만 group_send가 되지 않는지 다른 유저의 브라우저 콘솔창을 보면 방 삭제 관련 메세지가 뜨지를 않습니다.어디가 잘못되었는지, 어느 부분을 수정해야 하는지 알고 싶습니다.
-
미해결파이썬/장고로 웹채팅 서비스 만들기 (Feat. Channels) - 기본편
websocket 자바스크립트 클라이언트 구현?
안녕하세요! 선생님 강의를 보면 클라이언트 웹소켓 구현을 전부 자바스크립트만으로 구현을 하셨는데, 실제 제품을 만든다고 하면, 선생님 강의에서 구현하신것처럼 웹소켓 클라이언트 부분을 자바스크립트 만으로 충분할까요?아니면 웹소켓 관련 프레임워크가 있을까요?? 보통 웹 개발하면 순수 자바스크립트 만으로 개발을 잘 안하자나요?? 문뜩 든생각은 분명 원활한 개발을 위해 웹소켓도 뭔가 프레임워크 같은게 있을것 같은데, 회사가 파이썬으로 웹 개발하는 회사가 아니다 보니 잘 모르겠네요,.,,만약 있다면 어떤게 있고 참고할 만 자료가 있으면 알려주시면 감사합니다.혹시 제가 개념을 잘못 이해 하고 있으면 지적 부탁드립니다!!
-
해결됨ChatGPT 영어 상황극 채팅 서비스 만들기 (Feat. 파이썬/장고채널스)
07/02 강의에서 질문 드립니다.
강의 내용 4:00에 get_room 함수 관련하여room: RolePlayingRoom = None 지정하는 과정에서 에러가 나옵니다TypeError: unsupported operand type(s) for |: 'ModelBase' and 'NoneType'이러한 에러가 나오는데 파이썬의 버전 문제일까요?파이썬은 3.9.12 버전을 사용중입니다.
-
해결됨파이썬/장고로 웹채팅 서비스 만들기 (Feat. Channels) - 기본편
메세지 리액션 : 좋아요. 질문 드립니다.
좋아요 구현을 위해 append_message 함수에서 icon 생성 시 addEventListener를 등록하였습니다.append_message(message, pk , sender, time, img){ const like_icon = document.createElement('i'); like_icon.id = `like-icon-${pk}`; like_icon.className = 'fa-regular fa-heart'; like_icon.addEventListener('click', () => {this.like_msg(pk)}); ... }like_msg에서 removeEventLister를 통해 기존에 등록된 click를 해제하고 새로운 이벤트를 등록하였습니다.like_msg(pk){ const like_icon = document.querySelector(`#like-icon-${pk}`); like_icon.removeEventListener('click', () => {this.like_msg(pk)}); like_icon.addEventListener('click', () => {this.dislike_msg(pk)}); this.ws.send(JSON.stringify({ type : 'chat.message.like', pk : pk })) }사진과 같이 좋아요는 잘 작동합니다.다시 dislike를 하려면 계속 like_msg 이벤트가 동작합니다.like_icon을 통해서 하트를 변경하였습니다.case 'chat.message.like': this.like_icon(pk, cnt); break;event를 삭제하는 시점이 잘 못된것일까요? 제대로 삭제가 안 되더라구요. like_icon에서도 removeEventListener를 실행했었는데 동일한 결과가 나왔습니다. 어떤 시점에서 이벤트 리스너를 해제해야 할까요?
-
미해결ChatGPT 영어 상황극 채팅 서비스 만들기 (Feat. 파이썬/장고채널스)
안녕하세요. 강의 내용을 DRF에도 적용할 수 있을까요?
강의에서는 Django 로 진행하였는데DRF로 적용시켜 활용하여도 괜찮은가요?혹시 기술적으로 문제될 부분이 있을까 하여 질문 남깁니다!
-
해결됨파이썬/장고로 웹채팅 서비스 만들기 (Feat. Channels) - 기본편
{유저명}님이 메세지 입력 중입니다. 메세지 질문드립니다.
<form id="message_form"> <input type="text" name='message' class="form-control" autofocus autocomplete="off" id="msg-input"> </form>document.querySelector('#msg-input').addEventListener('keyup', this.on_typing.bind(this));on_typing(event){ if (event.target.value !== ''){ this.ws.send(JSON.stringify({ type : 'chat.message.typing' })) } },위에서 처럼 input에 keyup을 줘서 통신을 하도록 하였습니다. value를 기준으로 하니 input에 값을 입력할 때 마다 메시지가 만들어 지더라구요. keyup동안에 입력중이라는 신호를 줄 수 있는 방법이 있을까요?
-
해결됨파이썬/장고로 웹채팅 서비스 만들기 (Feat. Channels) - 기본편
채팅 로비에서 유저수 노출을 위하여
LobbyMember 모델을 생성해서 index에 들어오면 해당 user를 추가하는 식으로 구성하였습니다.class LobbyMember(models.Model): user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)consumer에도 따로 LobbyConsumer를 생성하여 접속할 땐 생성하거나 조회하고 채팅방에 접속 시 삭제하도록 하였습니다.class LobbyConsumer(JsonWebsocketConsumer): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.group_name = "lobby" def connect(self): user = self.scope["user"] if not user.is_authenticated: self.close() else: lobby_user, _ = LobbyMember.objects.get_or_create(user=user) async_to_sync(self.channel_layer.group_add)( self.group_name, self.channel_name ) async_to_sync(self.channel_layer.group_send)( self.group_name, {"type": "lobby"}, ) self.accept() def disconnect(self, code): if self.group_name: async_to_sync(self.channel_layer.group_discard)( self.group_name, self.channel_name ) user = self.scope["user"] lobby_member, _ = LobbyMember.objects.get_or_create(user=user) lobby_member.delete() async_to_sync(self.channel_layer.group_send)( self.group_name, {"type": "lobby"}, ) def lobby(self, message_dict): count = LobbyMember.get_count() self.send_json({"type": "lobby", "count": count})정상적으로 작동하는가 싶더니 2개의 다른 브라우저에서 같은 이용자로 로그인 한 후한 곳에서 로그아웃하면 해당 유저가 삭제되어아직 로그인 되어 있는 쪽에서는 로그인 유저가 0명으로 표시되더라구요.지금처럼 LobbyMember를 생성하지 않고 기존 모델로 사용하는 방법이나 방향이 있을까요? 이렇게 하는건 아닌것 같아서 질문드립니다!
-
미해결파이썬/장고로 웹채팅 서비스 만들기 (Feat. Channels) - 기본편
채팅방에서 마지막 유저가 나가면 채팅방 자동 삭제 질문드립니다.
채팅방에서 마지막 유저가 나가면 채팅방 자동 삭제를 구현하기 위해 , 그 뒤에 추가 과제들도 구현하기 위해 channel_name을 따로 model로 만들고 싶습니다.channel_name을 살펴보면 specific.19f083513f9244298b2f329aa6916165!fce7333e1805488dae51ab420eeaa6a4으로 구성되어 있습니다.test1, test2가 있다면 먼저 접속한 유저의 channel_name중 specific.19f083513f9244298b2f329aa6916165(!전까지)를 같이 공유해서 저장하는것 같더라구요.-> 맞을까요?그래서 specific.19f083513f9244298b2f329aa6916165까지는 동일하고 그 뒤에부터 다르게 저장되는것을 파악하였습니다.specific.19f083513f9244298b2f329aa6916165를 기준으로 model을 생성해서 관리하는 방법이 괜찮은 방법인지 질문드리고 싶습니다!서버가 강제 종료되면 이전에 channel_name이 그대로 남아있어서 최종적으로 마지막으로 나갔는지 파악하기 어려워 ChannelName를 생성해서 관리하면 괜찮지 않을까 생각했습니다.
-
미해결ChatGPT 영어 상황극 채팅 서비스 만들기 (Feat. 파이썬/장고채널스)
환경변수 로딩이 안됩니다 ㅠㅠ
안녕하세요 장고 환경변수 로딩하는 부분, 몇번 돌려보면서 확인했는데 계속 에러가 나오네요. 혹시 어떤게 잘못되었을지 알 수 있을까요.. 도와주세요..(venv) C:\Users\user\Documents\django_chat>python manage.py shellPython 3.10.9 | packaged by Anaconda, Inc. | (main, Mar 1 2023, 18:18:15) [MSC v.1916 64 bit (AMD64)] on win32Type "help", "copyright", "credits" or "license" for more information.(InteractiveConsole)>>> from django.conf import settings>>> settings.OPENAI_API_KEYTraceback (most recent call last): File "C:\Users\user\Documents\django_chat\venv\lib\site-packages\environ\environ.py", line 387, in get_value value = self.ENVIRON[var_name] File "C:\Users\user\anaconda3\lib\os.py", line 680, in getitem raise KeyError(key) from NoneKeyError: 'OPENAI_API_KEY'The above exception was the direct cause of the following exception:Traceback (most recent call last): File "<console>", line 1, in <module> File "C:\Users\user\Documents\django_chat\venv\lib\site-packages\django\conf\__init__.py", line 102, in getattr self._setup(name) File "C:\Users\user\Documents\django_chat\venv\lib\site-packages\django\conf\__init__.py", line 89, in _setup self._wrapped = Settings(settings_module) File "C:\Users\user\Documents\django_chat\venv\lib\site-packages\django\conf\__init__.py", line 217, in init mod = importlib.import_module(self.SETTINGS_MODULE) File "C:\Users\user\anaconda3\lib\importlib\__init__.py", line 126, in import_module return bootstrap.gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 1050, in gcdimport File "<frozen importlib._bootstrap>", line 1027, in findand_load File "<frozen importlib._bootstrap>", line 1006, in findand_load_unlocked File "<frozen importlib._bootstrap>", line 688, in loadunlocked File "<frozen importlib._bootstrap_external>", line 883, in exec_module File "<frozen importlib._bootstrap>", line 241, in callwith_frames_removed File "C:\Users\user\Documents\django_chat\mysite\settings.py", line 134, in <module> OPENAI_API_KEY=env.str("OPENAI_API_KEY") File "C:\Users\user\Documents\django_chat\venv\lib\site-packages\environ\environ.py", line 212, in str value = self.get_value(var, cast=str, default=default) File "C:\Users\user\Documents\django_chat\venv\lib\site-packages\environ\environ.py", line 391, in get_value raise ImproperlyConfigured(error_msg) from excdjango.core.exceptions.ImproperlyConfigured: Set the OPENAI_API_KEY environment variable>>>
-
미해결파이썬/장고로 웹채팅 서비스 만들기 (Feat. Channels) - 기본편
동기방식의 consumer 클래스와 비동기방식의 consumer클래스의 차이가 뭔지 궁금합니다.
1. 동기방식의 consumer 클래스와 비동기방식의 consumer클래스의 차이가 뭔지 궁금합니다.jsonwebsocketconsumer에서 모델을 임포트하여 db를 수정해도 문제가 없을까요?? 웹소켓에 연결할때 마가 하나의 연결당 하나의 consumer가 생성되는건가요??