Thank you all for reading my first post. Using Django 2.02, Django-channels 2.02.
I wish to store informations that get send from the frontend to the backend into Django session store. My problem is that the Django-channels session scope only seems to store information as long as the WebSocket is open, but I need it store it like a Django http-session.
First javascript from frontend index.html.
<script>
const conn = new WebSocket('ws://localhost:8000/');
var msg = {
type: "message",
message: "Trying to find a solution",
date: Date.now(),
};
msg = JSON.stringify(msg);
conn.onopen = () => conn.send(msg);
</script>
Consumers.py
from channels.generic.websocket import JsonWebsocketConsumer
from importlib import import_module
from django.conf import settings
SessionStore = import_module(settings.SESSION_ENGINE).SessionStore
#Have tried SessionStore to store but will also not work
class ConnectConsumer(JsonWebsocketConsumer):
def connect(self):
self.accept()
def receive(self, text_data=None):
text = self.decode_json(text_data) #decode incoming JSON
text_message = text.get('message')
print(self.scope["session"]["message"]) #prints "None"
self.scope["session"]["message"] = text_message
self.scope['session'].save()
print(self.scope["session"]["message"]) #prints "Trying to find a solution"
def disconnect(self, message):
pass
Routing.py
from django.urls import path
from channels.http import AsgiHandler
from channels.routing import ProtocolTypeRouter, URLRouter
from channels.auth import AuthMiddlewareStack
from consumers import ConnectConsumer
application = ProtocolTypeRouter({
"websocket": AuthMiddlewareStack(
URLRouter([
path("/", ConnectConsumer),
]),
)
})
Views.py
from django.shortcuts import render
def index(request):
print(request.session.keys()) #returns Empty dict([])
return render(
request,
'index.html',
)
Please tell me if this question is to broad or I am missing relevant information.