almost chatbox
This commit is contained in:
parent
dd34f474a5
commit
92d94af520
7 changed files with 107 additions and 40 deletions
|
@ -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
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue