almost chatbox

This commit is contained in:
cuom1999 2020-03-20 22:48:04 -06:00
parent dd34f474a5
commit 92d94af520
7 changed files with 107 additions and 40 deletions

View file

@ -2,6 +2,9 @@ import json
from channels.generic.websocket import AsyncWebsocketConsumer
from .models import Message
from .views import format_time
from django.urls import reverse
from django.http import HttpResponse, HttpResponseRedirect
from judge.models.profile import Profile
@ -14,7 +17,7 @@ class ChatConsumer(AsyncWebsocketConsumer):
# Join room group
await self.channel_layer.group_add(
self.room_group_name,
self.channel_name
self.channel_name,
)
await self.accept()
@ -23,7 +26,7 @@ class ChatConsumer(AsyncWebsocketConsumer):
# Leave room group
await self.channel_layer.group_discard(
self.room_group_name,
self.channel_name
self.channel_name,
)
# Receive message from WebSocket
@ -58,6 +61,5 @@ def save_data_and_get_time(message):
.get(id=message['author_id']),
)
new_message.save()
HttpResponseRedirect(reverse('chat'))
return new_message.time

View file

@ -1,25 +1,50 @@
from django.utils.translation import gettext as _
from django.views.generic import ListView
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render
from django.core.paginator import Paginator
from django.urls import reverse
from judge.jinja2.gravatar import gravatar
from .models import Message
import json
def format_time(time):
return time.strftime('%H:%M %p %d-%m-%Y')
def format_messages(messages):
msg_list = [{
'time': format_time(msg.time),
'author': str(msg.author),
'body': msg.body,
'image': gravatar(msg.author, 32),
} for msg in messages]
return json.dumps(msg_list)
class ChatView(ListView):
model = Message
context_object_name = 'message'
template_name = 'chat/chat.html'
title = _('Chat Box')
paginate_by = 50
paginator = Paginator(Message.objects.all(), paginate_by)
def get(self, request, *args, **kwargs):
page = request.GET.get('page')
if (page == None):
return super().get(request, *args, **kwargs)
cur_page = self.paginator.get_page(page)
return HttpResponse(format_messages(cur_page.object_list))
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['title'] = self.title
for msg in context['message']:
for msg in context['message']:
msg.time = format_time(msg.time)
return context