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()