不能点击私信:能选中用户但是不能发送消息进行通信?如何改,谢谢!
来源:6-3 通用类视图ListView源码详解
慕的地2047357
2021-05-11
老师这是浏览器端报的错500,后端代码排查。我没有找到错误。您帮我在看看。
consumer.py代码是:
import json
from channels.generic.websocket import AsyncWebsocketConsumer
class MessagesConsumer(AsyncWebsocketConsumer):
"""处理私信应用中WebSocket请求"""
async def connect(self):
if self.scope['user'].is_anonymous:
# 未登录的用户拒绝连接
await self.close()
else:
await self.channel_layer.group_add(self.scope['user'].username, self.channel_name)
await self.accept()
async def receive(self, text_data=None, bytes_data=None):
"""接收私信"""
await self.send(text_data=json.dumps(text_data))
async def disconnect(self, code):
"""离开聊天组"""
await self.channel_layer.group_discard(self.scope['user'].username, self.channel_name)from django.urls import path
from zanhu.messager import views
app_name = 'messager'
urlpatterns = [
path('', views.MessagesListView.as_view(), name='messages_list'),
path('send-message/', views.send_message, name='send_message'),
path('<username>/', views.ConversationListView.as_view(),name='conversation_detail'),
]
@login_required
@ajax_required
@require_http_methods(["POST"])
def send_message(request):
"""发送消息,AJAX POST请求"""
sender = request.user
recipient_username = request.POST['to']
recipient = get_user_model().objects.get(username=recipient_username)
message = request.POST['message']
if len(message.strip()) != 0 and sender != recipient:
msg = Message.objects.create(
sender=sender,
recipient=recipient,
message=message
)
channel_layer = get_channel_layer()
payload = {
'type': 'receive',
'message': render_to_string('messager/single_message.html', {"message": msg}),
'sender': sender.username
}
# group_send(group: 所在组-接收者的username, message: 消息内容)
async_to_sync(channel_layer.group_send)(recipient.username, payload)
return render(request, 'messager/single_message.html', {'message': msg})
return HttpResponse()
写回答
4回答
-
Jack
2021-05-12
第10-15小节有排错思路讲解
10 -
Jack
2021-05-12
您好,这个reconneting-websocket.js代码没有问题的,现在是ws链接建立失败,后端500报错。应该是自己开发的代码哪里写错了。需要提供相关视图和consumer.py的代码
112021-05-16 -
Jack
2021-05-20
不好意思,回复太迟。最近人累傻了
00 -
Jack
2021-05-20
您好,代码中没有看出问题。redis服务是否正常启动?收到500报错前后,可以去看看redis里面数据是否有变化,另外,username不能用中文
00
相似问题
私信功能的通知处理器
回答 2
开发环境可以直接使用win10么?
回答 2