diff --git a/docker-compose/requirements/djangoserver/Dockerfile b/docker-compose/requirements/djangoserver/Dockerfile index d0d9410..b37a9d2 100644 --- a/docker-compose/requirements/djangoserver/Dockerfile +++ b/docker-compose/requirements/djangoserver/Dockerfile @@ -4,7 +4,7 @@ RUN apt update RUN apt upgrade -y RUN apt install -y python3 python3-pip postgresql-client -RUN pip3 install django psycopg +RUN pip3 install django psycopg "channels[daphne]" ARG DB_HOST=; ARG DB_NAME=; diff --git a/docker-compose/requirements/djangoserver/file/server/server/asgi.py b/docker-compose/requirements/djangoserver/file/server/server/asgi.py index 5a88883..351ed8c 100644 --- a/docker-compose/requirements/djangoserver/file/server/server/asgi.py +++ b/docker-compose/requirements/djangoserver/file/server/server/asgi.py @@ -9,8 +9,17 @@ https://docs.djangoproject.com/en/4.2/howto/deployment/asgi/ import os +from channels.routing import ProtocolTypeRouter, URLRouter +from django.urls import path from django.core.asgi import get_asgi_application +from .websocket import WebsocketHandler + os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'server.settings') -application = get_asgi_application() +django = get_asgi_application() + +application = ProtocolTypeRouter({ + "http": django, + "websocket":URLRouter({path("ws",WebsocketHandler.as_asgi())}) +}) diff --git a/docker-compose/requirements/djangoserver/file/server/server/models.py b/docker-compose/requirements/djangoserver/file/server/server/models.py index b1c90bb..6768377 100644 --- a/docker-compose/requirements/djangoserver/file/server/server/models.py +++ b/docker-compose/requirements/djangoserver/file/server/server/models.py @@ -1,5 +1,18 @@ from django.db import models -class TaMereLaPute(models.Model): +class User(models.Model): id = models.AutoField(primary_key=True) - test = models.CharField(max_length=200) + nickname = models.CharField(max_length=20) + mail = models.EmailField() + password = models.CharField(max_length=100) + +class Message(models.Model): + id = models.AutoField(primary_key=True) + date = models.DateTimeField(auto_now_add=True) + sender = models.ForeignKey("User",on_delete=models.SET_NULL, null=True, related_name="sender") + to = models.ForeignKey("User", on_delete=models.CASCADE, related_name="to") + +class Game(models.Model): + id = models.AutoField(primary_key=True) + player1 = models.ForeignKey("User", on_delete=models.SET_NULL, null=True, related_name="p1") + player2 = models.ForeignKey("User", on_delete=models.SET_NULL, null=True, related_name="p2") diff --git a/docker-compose/requirements/djangoserver/file/server/server/settings.py b/docker-compose/requirements/djangoserver/file/server/server/settings.py index 9d4b4ce..aa06a99 100644 --- a/docker-compose/requirements/djangoserver/file/server/server/settings.py +++ b/docker-compose/requirements/djangoserver/file/server/server/settings.py @@ -31,6 +31,8 @@ ALLOWED_HOSTS = ['*'] # Application definition INSTALLED_APPS = [ + 'daphne', + 'channels', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', @@ -125,3 +127,5 @@ STATIC_URL = 'static/' # https://docs.djangoproject.com/en/4.2/ref/settings/#default-auto-field DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' + +ASGI_APPLICATION = 'server.asgi.applicatio' diff --git a/docker-compose/requirements/djangoserver/file/server/server/urls.py b/docker-compose/requirements/djangoserver/file/server/server/urls.py index cf86758..e8c9e6a 100644 --- a/docker-compose/requirements/djangoserver/file/server/server/urls.py +++ b/docker-compose/requirements/djangoserver/file/server/server/urls.py @@ -18,6 +18,5 @@ from django.urls import path from . import views urlpatterns = [ - path("",views.index, name='patate'), - path("set",views.set, name='patate douce') + path("",views.index, name='patate') ] diff --git a/docker-compose/requirements/djangoserver/file/server/server/views.py b/docker-compose/requirements/djangoserver/file/server/server/views.py index 5c415d1..eecf7fd 100644 --- a/docker-compose/requirements/djangoserver/file/server/server/views.py +++ b/docker-compose/requirements/djangoserver/file/server/server/views.py @@ -1,15 +1,5 @@ from django.http import HttpResponse -from .models import TaMereLaPute +from .models import User def index(request): - try: - a = TaMereLaPute.objects.get(id=1) - return HttpResponse(a.test) - except TaMereLaPute.DoesNotExist: - return HttpResponse("does not exist") - -def set(request): - a = TaMereLaPute(test="coucou les musulmans moi je mange la glace") - a.save() - return HttpResponse("done") - + return HttpResponse("AAAAAAAAAAAAAAAAAAAAAAA") diff --git a/docker-compose/requirements/djangoserver/file/server/server/websocket.py b/docker-compose/requirements/djangoserver/file/server/server/websocket.py new file mode 100644 index 0000000..3f2b8de --- /dev/null +++ b/docker-compose/requirements/djangoserver/file/server/server/websocket.py @@ -0,0 +1,13 @@ +from channels.generic.websocket import WebsocketConsumer + +class WebsocketHandler(WebsocketConsumer): + def connect(self): + self.accept() + print("AAAAAAAAAAAAA") + + def disconnect(self, close_code): + print("CCCCCCCCCCCCCC") + + def receive(self, message): + print("BBBBBBBBBBBB") + self.send(text_data=json.dumps({"AAAAA":"received"})) diff --git a/docker-compose/requirements/djangoserver/start.sh b/docker-compose/requirements/djangoserver/start.sh index 8603e33..df7958e 100644 --- a/docker-compose/requirements/djangoserver/start.sh +++ b/docker-compose/requirements/djangoserver/start.sh @@ -2,4 +2,5 @@ until pg_isready -h "$DB_HOST"; do sleep 0.5 ;echo "waiting for database";done cd /var/www/djangoserver/server python3 manage.py makemigrations server python3 manage.py migrate -python3 manage.py runserver 0.0.0.0:8000 +#python3 manage.py runserver 0.0.0.0:8000 +daphne -p 8000 -b 0.0.0.0 server.asgi:application diff --git a/docker-compose/requirements/nginx/conf/nginx.conf b/docker-compose/requirements/nginx/conf/nginx.conf index 1b9a3a6..19d7ad7 100644 --- a/docker-compose/requirements/nginx/conf/nginx.conf +++ b/docker-compose/requirements/nginx/conf/nginx.conf @@ -28,6 +28,22 @@ http { location / { proxy_pass http://djangoserver:8000; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + + location /ws { + proxy_pass http://djangoserver:8000; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_read_timeout 86400; } location /admin {