diff --git a/app/website/consumers.py b/app/website/consumers.py new file mode 100644 index 0000000..21d0bea --- /dev/null +++ b/app/website/consumers.py @@ -0,0 +1,41 @@ +import json +from channels.generic.websocket import AsyncWebsocketConsumer +from asgiref.sync import sync_to_async +from .views import page_talks + +class WebsiteConsumer(AsyncWebsocketConsumer): + + async def connect(self): + '''Connect user''' + self.room_name = self.scope["url_route"]["kwargs"]["room_id"] + self.room_group_name = "root_%s" % self.room_name + + # Join room group + await self.channel_layer.group_add(self.room_group_name, self.channel_name) + + # Send success connection + await self.accept() + + # Send Home page + await self.channel_layer.group_send( + self.room_group_name, + { + "type": "page_talks" + } + ) + + async def disconnect(self, close_code): + ''' Cliente se desconecta ''' + # Leave room group + await self.channel_layer.group_discard(self.room_group_name, self.channel_name) + + async def receive(self, text_data): + pass + + def _get_talks(self): + return page_talks() + + async def page_talks(self, event): + ''' Send Home page ''' + html = await sync_to_async(self._get_talks)() + await self.send(text_data=html) \ No newline at end of file diff --git a/app/website/routing.py b/app/website/routing.py new file mode 100644 index 0000000..a90b7a8 --- /dev/null +++ b/app/website/routing.py @@ -0,0 +1,7 @@ +from django.urls import re_path + +from . import consumers + +websocket_urlpatterns = [ + re_path(r'ws/pages/(?P\w+)/$', consumers.WebsiteConsumer), +] \ No newline at end of file diff --git a/app/website/templates/layouts/base.html b/app/website/templates/layouts/base.html index e557327..8bdaefe 100644 --- a/app/website/templates/layouts/base.html +++ b/app/website/templates/layouts/base.html @@ -17,6 +17,20 @@ - {% block content %}{% endblock %} +
+
+ +
+
+
diff --git a/app/website/templates/pages/about.html b/app/website/templates/pages/about.html new file mode 100644 index 0000000..48f4855 --- /dev/null +++ b/app/website/templates/pages/about.html @@ -0,0 +1,3 @@ +
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit. Corporis dignissimos dolor inventore laudantium libero optio quo reprehenderit repudiandae sapiente similique. Delectus dolorum enim fuga fugiat ipsam nam recusandae sequi sint. +
diff --git a/app/website/templates/pages/posts.html b/app/website/templates/pages/posts.html deleted file mode 100644 index f1ed912..0000000 --- a/app/website/templates/pages/posts.html +++ /dev/null @@ -1,5 +0,0 @@ -{% extends 'layouts/base.html' %} - -{% block content %} - Hola -{% endblock %} diff --git a/app/website/templates/pages/talks.html b/app/website/templates/pages/talks.html new file mode 100644 index 0000000..6bd08c1 --- /dev/null +++ b/app/website/templates/pages/talks.html @@ -0,0 +1,9 @@ +
+ {% for talk in talks %} +
+
{{ talk.title }}
+

+ +
+ {% endfor %} +
diff --git a/app/website/views.py b/app/website/views.py index 8438bc8..4efcaf4 100644 --- a/app/website/views.py +++ b/app/website/views.py @@ -1,5 +1,23 @@ from django.shortcuts import render +from django.template.loader import render_to_string +from random import randint +from django.conf import settings +from .models import Talk +from asgiref.sync import sync_to_async def index(request): - return render(request, "pages/posts.html") + """Render layout page""" + return render(request, "layouts/base.html", { + "room_random": randint(1000000, 9999999), + "DOMAIN": settings.DOMAIN, + }) + +def page_talks(): + return render_to_string("pages/talks.html", { + "talks": Talk.objects.order_by("title")[:5] + }) + + +def page_about(): + return render_to_string("pages/about.html", {}) \ No newline at end of file diff --git a/event/asgi.py b/event/asgi.py index 8cca061..f029bdf 100644 --- a/event/asgi.py +++ b/event/asgi.py @@ -6,11 +6,21 @@ It exposes the ASGI callable as a module-level variable named ``application``. For more information on this file, see https://docs.djangoproject.com/en/3.2/howto/deployment/asgi/ """ - import os -from django.core.asgi import get_asgi_application - os.environ.setdefault("DJANGO_SETTINGS_MODULE", "event.settings") +import django -application = get_asgi_application() +django.setup() + +from channels.auth import AuthMiddlewareStack +from channels.routing import ProtocolTypeRouter, URLRouter +from django.core.asgi import get_asgi_application +from app.website.routing import websocket_urlpatterns + + +application = ProtocolTypeRouter( + { + "websocket": AuthMiddlewareStack(URLRouter(websocket_urlpatterns)), + } +)