pip install Django-socketio django-admin startproject chatroom cd chatroom python manage.py startapp chat python INSTALLED_APPS = [ ... 'chat', 'django_socketio', ... ] MIDDLEWARE = [ ... 'django_socketio.middleware.SocketIOMiddleware', ... ] python from django.db import models class ChatRoom(models.Model): name = models.CharField(max_length=100) def __str__(self): return self.name python from django.db import models from django.contrib.auth.models import User from django.utils import timezone class ChatMessage(models.Model): room = models.ForeignKey(ChatRoom, on_delete=models.CASCADE) user = models.ForeignKey(User, on_delete=models.CASCADE) message = models.TextField() timestamp = models.DateTimeField(default=timezone.now) def __str__(self): return f'{self.user.username}: {self.message}' python from django.shortcuts import render, get_object_or_404 from django.http import HttpResponseBadRequest from django.contrib.auth.decorators import login_required from django.contrib.sites.shortcuts import get_current_site from django_socketio import events from .models import ChatRoom, ChatMessage @login_required def chatroom(request, room_id): room = get_object_or_404(ChatRoom, id=room_id) messages = ChatMessage.objects.filter(room=room).order_by('timestamp') return render(request, 'chatroom.html', {'room': room, 'messages': messages}) @events.on_message(channel='^/chat/(?P<room_id>\d+)$') def message(request, socket, context, message): room_id = context['room_id'] room = get_object_or_404(ChatRoom, id=room_id) user = request.user if not user.is_authenticated: return HttpResponseBadRequest() ChatMessage.objects.create(room=room, user=user, message=message) context['message'] = message return context python from django.urls import path from . import views urlpatterns = [ path('chat/<int:room_id>/', views.chatroom, name='chatroom'), ] python from django_socketio import views as socketio_views urlpatterns = [ ... path('django_socketio', socketio_views.serve, name='django_socketio'), ] python manage.py runserver


上一篇:
下一篇:
切换中文