묻고 답해요
150만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
순위 정보를
불러오고 있어요
-
미해결파이썬/장고로 웹채팅 서비스 만들기 (Feat. Channels) - 기본편
유저목록 확인 문제 질문드립니다.
def room_users(request, room_name): # room_name으로 해당 방을 찾기 room = get_object_or_404(Room, name=room_name) # 사용자가 방에 참여한 상태인지 확인 if not room.is_joined_user(request.user): return HttpResponse("Unauthorized user", status=401) # 방에 접속 중인 사용자 목록 가져오기 username_list = room.get_online_usernames() return JsonResponse({ "username_list": username_list, }) 저는 하나의 채팅방만 사용하기때문에 room_pk가 아니라 room_name을 전달했습니다. 근데 page not found가 뜹니다. 제가 생각기로는 name = room_name 전달이 제대로 안되어서 이렇게 뜨는거같습니다. room_pk에 관한 부분을 제대로 처리하지 못해 접속하거나 나갈때 뜨는 메세지도 제대로 작동하지 않고 있습니다.class Room(OnlineUserMixin, models.Model): owner = models.ForeignKey( settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="owned_room_set", ) name = models.CharField(max_length=100) class Meta: ordering = ["-pk"] @property def chat_group_name(self): return self.make_chat_group_name(room=self) chat/routing.pyfrom django.urls import path, re_path from chat import consumers websocket_urlpatterns = [ path("ws/chat/<str:room_name>/chat/", consumers.ChatConsumer.as_asgi()), ] chat/urls.py from django.urls import path from app.urls import urlpatterns from chat import views # 향후 url reverse에 활용 app_name = "chat" urlpatterns=[ path("", views.index, name = "index"), path("<str:room_name>/chat/", views.room_chat, name = "room_chat" ), path("<str:room_name>/users/", views.room_users, name = "room_users" ), ] consumers.pyfrom asgiref.sync import async_to_sync from channels.generic.websocket import JsonWebsocketConsumer from chat.models import Room # 모든 유저가 고정된 채널 레이어 그룹을 가질것. class ChatConsumer(JsonWebsocketConsumer): SQUARE_GROUP_NAME = "1" group_name = [SQUARE_GROUP_NAME] def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) def connect(self): user = self.scope['user'] self.group_name = self.SQUARE_GROUP_NAME if not user.is_authenticated: self.close() else: is_new_join = self.group_name if is_new_join: async_to_sync(self.channel_layer.group_send)( self.group_name, { "type": "chat.user.join", "username": user.username, } ) async_to_sync(self.channel_layer.group_add)( self.group_name, self.channel_name ) 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'] # if self.room is not None: # is_last_leave = self.room.user_leave(self.channel_name, user) # if is_last_leave: # async_to_sync(self.channel_layer.group_send)( # self.group_name, # { # "type": "chat.user.leave", # "username": user.username, # } # ) def chat_user_join(self, message_dict): self.send_json({ "type": "chat.user.join", "username": message_dict["username"], }) def chat_user_leave(self, message_dict): self.send_json({ "type": "chat.user.leave", "username": message_dict["username"], }) def chat_message(self, message_dict): self.send_json({ "type": "chat.message", "message": message_dict["message"], "sender": message_dict["sender"], }) def receive_json(self, content, **kwargs): user = self.scope["user"] _type = content["type"] if _type == "chat.message": message = content["message"] sender = user.username async_to_sync(self.channel_layer.group_send)( self.SQUARE_GROUP_NAME, { "type": "chat.message", "message": message, "sender": sender, } ) else: print(f"Invalid message type : ${_type}") 질문 받아주셔서 감사합니다. 선생님의 파이썬 장고 가이드를 다 보고 이 강의 질문하는게 맞다고 생각합니다. , 제 팀프로젝트 데드라인이 임박하여 파이썬 장고 가이드를 다 보지 못하고, 제대로 공부하지 못하고 채널스를 공부하게 되어 이런 질문을 드리게되는거같아 죄송합니다. 프로젝트가 끝나도 장고 놓지 않고 제대로 이해할수있게 공부하겠습니다. 감사합니다ㅠ
-
미해결파이썬/장고로 웹채팅 서비스 만들기 (Feat. Channels) - 기본편
안녕하세요 선생님,
#consumers.py from asgiref.sync import async_to_sync from channels.generic.websocket import JsonWebsocketConsumer from chat.models import Room # 모든 유저가 고정된 채널 레이어 그룹을 가질것. class ChatConsumer(JsonWebsocketConsumer): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) SQUARE_GROUP_NAME = "square" self.group_name = [SQUARE_GROUP_NAME] self.room = None def connect(self): user = self.scope['user'] if not user.is_authenticated: self.close() else: room_name = self.scope['url_route']['kwargs']['room_pk'] try: self.room = Room.objects.get(pk=room_name) except Room.DoesNotExist: #지정 룸 pk에 룸 인스턴스가 없을 경우 웹소켓 연결요청 수락. pass else: self.group_name = self.SQUARE_GROUP_NAME is_new_join = self.room.user_join(self.channel_name, user) if is_new_join: async_to_sync(self.channel_layer.group_send)( self.group_name, { "type": "chat.user.join", "username": user.username, } ) async_to_sync(self.channel_layer.group_add)( self.group_name, self.channel_name ) 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'] if self.room is not None: is_last_leave = self.room.user_leave(self.channel_name, user) if is_last_leave: async_to_sync(self.channel_layer.group_send)( self.group_name, { "type": "chat.user.leave", "username": user.username, } ) def chat_user_join(self, message_dict): self.send_json({ "type": "chat.user.join", "username": message_dict["username"], }) def chat_user_leave(self, message_dict): self.send_json({ "type": "chat.user.leave", "username": message_dict["username"], }) def chat_message(self, message_dict): self.send_json({ "type": "chat.message", "message": message_dict["message"], "sender": message_dict["sender"], }) def receive_json(self, content, **kwargs): user = self.scope["user"] _type = content["type"] if _type == "chat.message": message = content["message"] sender = user.username async_to_sync(self.channel_layer.group_send)( self.SQUARE_GROUP_NAME, { "type": "chat.message", "message": message, "sender": sender, } ) else: print(f"Invalid message type : ${_type}") room_name = self.scope['url_route']['kwargs']['room_pk'] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^ KeyError: 'room_pk' 이런 에러가 나서, urls.py, views.py, index.html도 맞춰줘 봤지만, 잘 해결이 되질 않습니다. 어떤식으로 이 에러를 처리해야할까요. 오늘도 좋은 하루 되시길 바랍니다. 감사합니다.
-
미해결파이썬/장고로 웹채팅 서비스 만들기 (Feat. Channels) - 기본편
하나의 채팅방만 만들어보려고 하는데 잘 안되고 있습니다.
안녕하세요 선생님. 인증받지 않은 유저의 웹소켓 접근을 거부하려고 하는데요,Traceback (most recent call last): File "/Users/sunnnwo/workspace/pongchatT/venv/lib/python3.11/site-packages/django/contrib/staticfiles/handlers.py", line 101, in __call__ return await self.application(scope, receive, send) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/sunnnwo/workspace/pongchatT/venv/lib/python3.11/site-packages/channels/routing.py", line 62, in __call__ return await application(scope, receive, send) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/sunnnwo/workspace/pongchatT/venv/lib/python3.11/site-packages/channels/sessions.py", line 47, in __call__ return await self.inner(dict(scope, cookies=cookies), receive, send) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/sunnnwo/workspace/pongchatT/venv/lib/python3.11/site-packages/channels/sessions.py", line 263, in __call__ return await self.inner(wrapper.scope, receive, wrapper.send) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/sunnnwo/workspace/pongchatT/venv/lib/python3.11/site-packages/channels/auth.py", line 185, in __call__ return await super().__call__(scope, receive, send) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/sunnnwo/workspace/pongchatT/venv/lib/python3.11/site-packages/channels/middleware.py", line 24, in __call__ return await self.inner(scope, receive, send) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ TypeError: 'list' object is not callable WebSocket DISCONNECT /ws/chat/test/chat/ [127.0.0.1:61013] HTTP GET /chat/ 200 [0.01, 127.0.0.1:61007] /Users/sunnnwo/workspace/pongchat/mysite/asgi.py changed, reloading. Watching for file changes with StatReloader 아래와 같이 설정하고 실행해봤는데, 위와 같은 에러가 발생했습니다. AuthMiddlewareStack을 이용하여 인증된 사용자만 채팅할 수 있게 하려면 어느 부분을 수정해야할까요. 감사합니다. 좋은 하루되세요.asgi.py application = ProtocolTypeRouter({ "http" : django_asgi_app, "websocket" : AuthMiddlewareStack( app.routing.websocket_urlpatterns + chat.routing.websocket_urlpatterns, ), })consumers.pyfrom asgiref.sync import async_to_sync from channels.generic.websocket import JsonWebsocketConsumer # 모든 유저가 고정된 채널 레이어 그룹을 가질것. class ChatConsumer(JsonWebsocketConsumer): SQUARE_GROUP_NAME = "square" groups = [SQUARE_GROUP_NAME] def receive_json(self, content, **kwargs): # user = self.scope["user"] user = self.scope["user"] _type = content["type"] if not user.is_authenticated: self.close() else: if _type == "chat.message": message = content["message"] async_to_sync(self.channel_layer.group_send)( self.SQUARE_GROUP_NAME, { "type": "chat.message", "message": message, } ) else: print(f"Invalid message type : ${_type}") def chat_message(self, message_dict): self.send_json({ "type": "chat.message", "message": message_dict["message"], })chat/routing.pyfrom django.urls import path, re_path from chat import consumers websocket_urlpatterns = [ path("ws/chat/<str:room_name>/chat/", consumers.ChatConsumer.as_asgi()), ] chat/urls.pyurlpatterns=[ path("", views.index, name = "index"), path("<str:room_name>/chat/", views.room_chat, name = "room_chat" ), ]
-
미해결파이썬/장고로 웹채팅 서비스 만들기 (Feat. Channels) - 기본편
도커와 연동 관련 질문드립니다.
version: '3.8' services: postgres: image: postgres:14 env_file: .env volumes: - postgres_data:/var/lib/postgresql/data networks: - backend django: build: context: ./backend dockerfile: Dockerfile ports: - "8000:8000" volumes: - ./backend:/app - static_volume:/app/myproject/staticfiles - ./frontend:/app/myproject/myapp/static/myapp - media_volume:/app/myproject/media depends_on: - postgres - redis environment: - PYTHONUNBUFFERED=1 - DJANGO_SETTINGS_MODULE=myproject.settings env_file: .env networks: - frontend - backend redis: image: redis:6 networks: - backend nginx: build: ./nginx volumes: - media_volume:/usr/share/nginx/html/media - static_volume:/usr/share/nginx/html/static - ./frontend:/usr/share/nginx/html/frontend ports: - "8443:8443" depends_on: - django networks: - frontend - backend adminer: image: adminer:latest restart: always ports: - "8080:8080" networks: - backend depends_on: - postgres volumes: postgres_data: static_volume: media_volume: networks: backend: frontend:docker-compose 설정인데요, 저희 팀원이 만들때 templates 폴더를 안쓰고 전부 .js 파일로 만들어놨습니다. 이런 경우 채팅 모듈을 추가하려고하면 어떤 방식으로 해야할까요. 강의외적인 부분 질문드려서 죄송합니다.
-
미해결파이썬/장고로 웹채팅 서비스 만들기 (Feat. Channels) - 기본편
채팅방 참여자 목록 - 채팅방 입장/퇴장 실시간 이벤트 처리
해당 기능을 구현까지 완료했고, 결과는 도출합니다.궁금한 점이 사용자가 채팅방을 나간 후 퇴장 처리 메세지가 창에 나타날 때 Delay? 나간 후 한참 시간이 지난 후에 나타나는데, 자연스러운 상황인지 아니면 제가 잘못한 건지 판단이 되지 않습니다..
-
미해결파이썬/장고로 웹채팅 서비스 만들기 (Feat. Channels) - 기본편
안녕하세요, onopen() 문제로 질문드립니다.
똑같이 코딩한거같은데 Uncaught InvalidStateError: Failed to execute 'send' on 'WebSocket': Still in CONNECTING이런 문제가 생겨 connect()에서 console.log로 this.ws 찍어보니까. readystate가 0에서 바뀌지 않고 onsubmit()에서도 0인걸 확인했습니다. 그래서 웹소켓이 연결되지 않았으니, this.ws.send()에서 걸리는것이라고 생각은하는데, 어디를 고쳐야 될지 모르겠습니다.{# Chat room #} {% extends "chat/base.html" %} {% block extra-style %} <style> .chat-message > div { background-color: #3b3b3b; color: #e1e1e1; border-radius: 0.8em; padding: 0.4em; margin: 0.4em 0; display: inline-block; white-space: pre-wrap; max-width: 80%; word-wrap: break-word; } </style> {% endblock %} {% block content %} <h2>채팅방 :{{ room_name }}</h2> {# 웹소켓으로 실시간 채팅 기능 구현하기 #} <div class="container"> <div class="row"> <div class="col-sm-12"> <div class="card" style="height: 600px;"> <div class="card-header"> 채팅방:{{ room_name }} </div> <div class="card-body overflow-hidden"> <div id="chat_messages" class="w-100 h-100 border-0 overflow-hidden overflow-scroll"></div> </div> <div class="card-footer"> <form id="message_form"> <input type="text" name="message" class="form-control" autofocus autocomplete="off" /> </form> </div> </div> <hr class="my-3" /> <a href="{% url 'chat:index' %}" class="btn btn-primary"> 대기실로 이동 </a> </div> </div> </div> {% endblock %} {% block extra-script %} <script> const handler = { chat_messages_tag: null, ws: null, retry: 0, init(){ console.log("handler.init() 실행됨"); this.chat_messages_tag= document.querySelector("#chat_messages"); document.querySelector("#message_form").addEventListener("submit", this.onsubmit.bind(this)); }, connect(ws_url){ if(this.ws) { this.ws.close(); } this.ws = new WebSocket(ws_url || this.ws?.url); console.log(this.ws, "연결1.") this.ws.onopen = this.onopen.bind(this); this.ws.onclose = this.onclose.bind(this); this.ws.onerror = this.onerror.bind(this); this.ws.onmessage = this.onmessage.bind(this); }, reconnect() { this.connect(); }, onopen(){ console.log("웹소켓 서버와 접속, : Room_chat"); this.retry = 0; }, onclose(event){ if (!event.wasClean) { console.error("웹소켓이 죽었거나, 네트워크 에러"); if (this.retry < 3) { this.retry++; setTimeout(() => { this.reconnect(); console.log(`[${this.retry}] 접속 재시도 ...`); }, 1000 * this.retry) } else { console.log("웹소켓 서버에 접속할수 없습니다. 메인페이지로 이동합니다."); window.location.href = "{% url 'chat:index' %}"; } } }, onerror(){ console.log("웹소켓 에러 발생. 메인페이지로 이동합니다."); window.location.href = "{% url 'chat:index' %}" ; }, onmessage(event){ const message_json = event.data; console.log("메세지 수신 :", message_json); const { type, message } = JSON.parse(message_json); switch (type){ case "chat.message": this.append_message(message); break; default: console.error('Invalid message type: &{type}'); } }, append_message(message){//인자로 받은 채팅 메세지 로그에 추가 const element = document.createElement("div"); element.className = "chat-message"; const wrapper = document.createElement("div"); wrapper.textContent = message; element.appendChild(wrapper); this.chat_messages_tag.appendChild(element); this.chat_messages_tag.scrollTop = this.chat_messages_tag.scrollHeight; }, onsubmit(event){ //입력된 채팅 메세지 문자열을 획득하고, 메세지 로그에 추가. event.preventDefault(); const form_data = new FormData(event.target); //폼필드의 값을 오브젝트로 변환하여 props로 저장하고, 폼필드는 리셋합니다. const props = Object.fromEntries(form_data); event.target.reset(); // reset form const { message } = props; console.log("웹소켓으로 전송할 메세지: ", message); console.log(this.ws, "onsubmit"); {#this.append_message(message);#} this.ws.send(JSON.stringify({ type: "chat.message", message: message, })) } }; handler.init(); const protocol = location.protocol === 'https:' ? 'ws:' : 'wss:'; const ws_url = protocol + "//" + location.host + "/ws" + location.pathname; handler.connect(ws_url); </script> {% endblock %}from django.urls import path from chat import consumers websocket_urlpatterns = [ path("ws/chat/<str:room_name>/chat/", consumers.ChatConsumer.as_asgi()), ] import os from channels.routing import ProtocolTypeRouter, URLRouter from django.core.asgi import get_asgi_application import app.routing import chat.routing os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings') django_asgi_app = get_asgi_application() application = ProtocolTypeRouter({ "http" : django_asgi_app, "websocket" : URLRouter( chat.routing.websocket_urlpatterns + app.routing.websocket_urlpatterns, ) })from django.shortcuts import render # Create your views here. def index(request): return render(request, "chat/index.html") def room_chat(request, room_name): return render(request, "chat/room_chat.html",{ "room_name": room_name, })
-
미해결파이썬/장고로 웹채팅 서비스 만들기 (Feat. Channels) - 기본편
Consumer Instances 관련 질문 있습니다.
Consumer Instances를 어떻게 생각해야될지 이해가 잘 안되어 질문드립니다. 강의에 채널스 외부 그룹 채널 레이어 등을 그림으로 친절하게 표현해주셨는데 제가 정확하게 이해가 안되고 있습니다. 설명 부탁드려도 될까요? 감사합니다.
-
미해결파이썬/장고로 웹채팅 서비스 만들기 (Feat. Channels) - 기본편
안녕하세요, 요청은 채널스에서 먼저 받고, http 요청은 장고를 통해서 처리한다고 하셨는데요.
안녕하세요, 요청은 채널스에서 먼저 받고, http 요청은 장고를 통해서 처리한다고 하셨는데요. 그 의미를 정확하게 알고 싶습니다. 새해에도 건강하시고, "RAG 밑바닥부터 웹 채팅까지" 도 미리 감사드립니다.
-
미해결파이썬/장고로 웹채팅 서비스 만들기 (Feat. Channels) - 기본편
기능 구현 질문 드립니다.
선생님 안녕하세요, 기능 구현하는데 힌트 좀 받고 싶어서 질문 드립니다. 메세지 차단 기능초대기능접속유저 부분에서 프로필 확인 기능을 넣고 싶습니다.아직 장고가 손에 붙질 않아서.. 어느 부분을 수정해야할지 감이 오지 않습니다. 한번 해볼수있게 힌트 좀 부탁드려도 될까요.감사합니다.
-
미해결파이썬/장고로 웹채팅 서비스 만들기 (Feat. Channels) - 기본편
git에 있는 코드를 다운 받아 실행 해봤는데 에러가 났습니다.
안녕하세요, 제가 어떤식으로 작동하는지 보고 싶어서 먼저 다운 받아서 실행해봤는데, 이런 에러가 발생합니다. 채팅방 생성까진 되지만 채팅방으로 들어가면 1초후에 팅겨 http://127.0.0.1:8000/chat/ 주소로 자동 이동됩니다. AttributeError: 'ChatConsumer' object has no attribute 'channel_name'. Did you mean: 'channel_layer'?WebSocket DISCONNECT /ws/chat/2/chat/ [127.0.0.1:50136]HTTP GET /chat/ 200 [0.01, 127.0.0.1:50118] 질문 받아주셔서 감사합니다.
-
미해결파이썬/장고로 웹채팅 서비스 만들기 (Feat. Channels) - 기본편
ValueError: No route found for path 'ws/liveblog/'.
이런 에러가 발생했습니다. routing.py websocket_urlpatterns = [ path("ws/echo/", EchoConsumer.as_asgi()), ]path로 추가를 해주려고 했는데, 선생님께서는 추가 하지 않고 진행하셨던거같아서요. 지금 에러나는 부분은 admin으로 카드 추가하고 liveblog에 제대로 뜨는지 확인하는 부분이였습니다. WebSocket DISCONNECT /ws/liveblog/ [127.0.0.1:50574]WebSocket HANDSHAKING /ws/liveblog/ [127.0.0.1:50579]Exception inside application: No route found for path 'ws/liveblog/'.Traceback (most recent call last): File "/Volumes/code/mydjangochat/venv/lib/python3.12/site-packages/django/contrib/staticfiles/handlers.py", line 101, in call return await self.application(scope, receive, send) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Volumes/code/mydjangochat/venv/lib/python3.12/site-packages/channels/routing.py", line 62, in call return await application(scope, receive, send) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Volumes/code/mydjangochat/venv/lib/python3.12/site-packages/channels/routing.py", line 134, in call raise ValueError("No route found for path %r." % path)이런식의 에러가 뜨고 자동으로 Page not found라고 뜹니다. 감사합니다.
-
미해결파이썬/장고로 웹채팅 서비스 만들기 (Feat. Channels) - 기본편
지정 경로에 템플릿 파일 만드는 단축키가 뭔가요?
안녕하세요 선생님, 파이참 기능을 통해 템플릿 파일을 지정경로에 만들어준다고 하셨는데, 그게 참 편해보여서요.. 단축키가 무엇일까요. 새해 복 많이 받으시고 항상 건강하세요.
-
미해결파이썬/장고로 웹채팅 서비스 만들기 (Feat. Channels) - 기본편
채팅 내역을 영구적으로 저장하고 싶습니다.
강의를 아직 보지 않고 질문드립니다. models.py에 보면 채팅 내역에 대한 table 정의는 없는 것 같습니다. 혹시 이 부분은 강의에서 다루지 않나요?
-
미해결파이썬/장고로 웹채팅 서비스 만들기 (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 페이지로 이동하는데 강의에서는 채팅창으로 리다이렉션이 되는 이유가 궁금합니다.
주간 인기글
순위 정보를
불러오고 있어요