From b659b300914f7ddf9bf28e6a9fa986a72e4f40fd Mon Sep 17 00:00:00 2001
From: Dominik Gasparic <56818232+codedoga@users.noreply.github.com>
Date: Thu, 13 Oct 2022 12:25:14 +0200
Subject: [PATCH 1/3] opt for django
---
frameworks/django/app.py | 4 +-
frameworks/django/views.py | 79 +++++++++++++++++++-------------------
2 files changed, 40 insertions(+), 43 deletions(-)
diff --git a/frameworks/django/app.py b/frameworks/django/app.py
index 05e8e1f..b960574 100644
--- a/frameworks/django/app.py
+++ b/frameworks/django/app.py
@@ -1,12 +1,10 @@
from django.core.asgi import get_asgi_application
from django.conf import settings
-from . import views
-
settings.configure(
SECRET_KEY='nosecret',
DEBUG=False,
- ROOT_URLCONF = views,
+ ROOT_URLCONF="views",
)
app = get_asgi_application()
diff --git a/frameworks/django/views.py b/frameworks/django/views.py
index e2ea823..7902153 100644
--- a/frameworks/django/views.py
+++ b/frameworks/django/views.py
@@ -1,63 +1,62 @@
+import json
import time
+
from uuid import uuid4
+from django.http import HttpResponse, JsonResponse
+from django.views.generic import View
from django.urls import path
-from django.http import HttpResponse, JsonResponse, HttpResponseNotAllowed, HttpResponseBadRequest
-import json
-
-
-async def html(request):
- """Return HTML content and a custom header."""
- content = "HTML OK"
- headers = {'x-time': f"{time.time()}"}
- return HttpResponse(content, headers=headers)
-
-async def upload(request):
- """Load multipart data and store it as a file."""
- # 2021-04-18 Django 3.2 django.views.decorators.http.require_http_methods hasn't async support
- if request.method != 'POST':
- return HttpResponseNotAllowed(['POST'])
- formdata = request.FILES
- if 'file' not in formdata:
- return HttpResponseBadRequest('ERROR')
+class HtmlView(View):
+ """ Return HTML content and a custom header. """
+ async def get(self, request):
+ resp = HttpResponse('HTML OK')
+ resp.headers['x-time'] = time.time()
+ return resp
- with open(f"/tmp/{uuid4().hex}", 'wb') as target:
- target.write(formdata['file'].read())
- return HttpResponse(target.name, content_type="text/plain")
+class UploadView(View):
+ """ Load multipart data and store it as a file. """
+ async def post(self, request):
+ file = request.FILES.get('file')
+ if not file:
+ return HttpResponse('ERROR', status=400)
+
+ with open(f"/tmp/{uuid4().hex}", 'wb') as target:
+ target.write(file.read())
+ return HttpResponse(target.name, content_type="text/plain")
-async def api(request, user, record):
- """Check headers for authorization, load JSON/query data and return as JSON."""
- if request.method != 'PUT':
- return HttpResponseNotAllowed(['PUT'])
- if not request.headers.get('authorization'):
- return HttpResponse('ERROR', status=401)
+class ApiView(View):
+ """ Check headers for authorization, load JSON/query data and return as JSON. """
+ async def put(self, request, **kwargs):
+ if not request.headers.get('authorization'):
+ return HttpResponse('ERROR', status=401)
- data = json.loads(request.body.decode())
- return JsonResponse({
- 'params': {'user': user, 'record': record},
- 'query': dict(request.GET),
- 'data': data,
- })
+ data = json.loads(request.body)
+ return JsonResponse({
+ 'params': kwargs,
+ 'query': request.GET.dict(),
+ 'data': data,
+ })
urlpatterns = [
- path('html', html),
- path('upload', upload),
- path('api/users//records/', api),
+ path('html', HtmlView.as_view()),
+ path('upload', UploadView.as_view()),
+ path('api/users//records/', ApiView.as_view()),
]
# More load for routing system
# ----------------------------
-async def req_ok(*args, **kwargs):
- return HttpResponse('ok')
+class ReqOk(View):
+ async def get(self, request):
+ return HttpResponse('ok')
for n in range(5):
- urlpatterns.insert(0, path(f"route-{n}", req_ok))
- urlpatterns.insert(0, path(f"route-dyn-{n}/", req_ok))
+ urlpatterns.insert(0, path(f"route-{n}", ReqOk.as_view()))
+ urlpatterns.insert(0, path(f"route-dyn-{n}/", ReqOk.as_view()))
\ No newline at end of file
From 9e9f0a3cb0cd13e3b47238caab6f38681c533518 Mon Sep 17 00:00:00 2001
From: Dominik Gasparic <56818232+codedoga@users.noreply.github.com>
Date: Thu, 13 Oct 2022 12:30:55 +0200
Subject: [PATCH 2/3] update django version
---
frameworks/django/requirements.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/frameworks/django/requirements.txt b/frameworks/django/requirements.txt
index b492b47..3dc1335 100644
--- a/frameworks/django/requirements.txt
+++ b/frameworks/django/requirements.txt
@@ -1 +1 @@
-django == 4.0.3
+django==4.1.2
\ No newline at end of file
From 411a5865d646d11e56636fe95ce70511df2be306 Mon Sep 17 00:00:00 2001
From: Dominik Gasparic <56818232+codedoga@users.noreply.github.com>
Date: Thu, 13 Oct 2022 12:50:54 +0200
Subject: [PATCH 3/3] Update app.py
---
frameworks/django/app.py | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/frameworks/django/app.py b/frameworks/django/app.py
index b960574..05e8e1f 100644
--- a/frameworks/django/app.py
+++ b/frameworks/django/app.py
@@ -1,10 +1,12 @@
from django.core.asgi import get_asgi_application
from django.conf import settings
+from . import views
+
settings.configure(
SECRET_KEY='nosecret',
DEBUG=False,
- ROOT_URLCONF="views",
+ ROOT_URLCONF = views,
)
app = get_asgi_application()