From 532212bf0350be0e0cffe67591afc7789c71a728 Mon Sep 17 00:00:00 2001 From: Daniel Egger Date: Mon, 23 May 2022 09:23:35 +0200 Subject: [PATCH] Serve vue index page in development directly from vue --- client/vite.config.ts | 8 -- env_secrets/local_daniel.env | Bin 1477 -> 1536 bytes server/config/settings/base.py | 2 + server/config/urls.py | 21 ++-- server/vbv_lernwelt/core/views.py | 20 ++++ server/vbv_lernwelt/templates/pages/home.html | 108 ------------------ 6 files changed, 34 insertions(+), 125 deletions(-) delete mode 100644 server/vbv_lernwelt/templates/pages/home.html diff --git a/client/vite.config.ts b/client/vite.config.ts index 1bd01a2e..6fcf6971 100644 --- a/client/vite.config.ts +++ b/client/vite.config.ts @@ -30,13 +30,5 @@ export default ({mode}) => { '@': fileURLToPath(new URL('./src', import.meta.url)), }, }, - server: { - proxy: { - '^.*': process.env.VITE_PROXY_TARGET_BASE, - '/sso': process.env.VITE_PROXY_TARGET_BASE, - '/api': process.env.VITE_PROXY_TARGET_BASE, - '/todo': process.env.VITE_PROXY_TARGET_BASE, - } - }, }) } diff --git a/env_secrets/local_daniel.env b/env_secrets/local_daniel.env index d4a2197a9bbc0a087948ace1cc0871f4f297f792..b0f76beefe41ccf8390a2cb9c342ff88e61a4965 100644 GIT binary patch literal 1536 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 diff --git a/server/config/settings/base.py b/server/config/settings/base.py index 05b64b2c..9894b2a7 100644 --- a/server/config/settings/base.py +++ b/server/config/settings/base.py @@ -201,6 +201,8 @@ MEDIA_ROOT = str(APPS_DIR / "media") # https://docs.djangoproject.com/en/dev/ref/settings/#media-url MEDIA_URL = "/media/" +IT_SERVE_VUE = env.bool("IT_SERVE_VUE", DEBUG) +IT_SERVE_VUE_URL = env("IT_SERVE_VUE_URL", 'http://localhost:3000') # WAGTAIL # ------------------------------------------------------------------------------ diff --git a/server/config/urls.py b/server/config/urls.py index 6ed1ab7a..ed2fa5ad 100644 --- a/server/config/urls.py +++ b/server/config/urls.py @@ -5,26 +5,25 @@ from django.contrib import admin from django.contrib.auth import views as auth_views from django.contrib.auth.decorators import user_passes_test from django.contrib.staticfiles.urls import staticfiles_urlpatterns -from django.urls import include, path +from django.urls import include, path, re_path from django.views import defaults as default_views -from django.views.generic import TemplateView from drf_spectacular.views import SpectacularAPIView, SpectacularSwaggerView +from grapple import urls as grapple_urls from ratelimit.exceptions import Ratelimited from rest_framework.authtoken.views import obtain_auth_token +from wagtail.admin import urls as wagtailadmin_urls +from wagtail.core import urls as wagtail_urls +from wagtail.documents import urls as wagtaildocs_urls + from vbv_lernwelt.core.middleware.auth import django_view_authentication_exempt from vbv_lernwelt.core.views import ( rate_limit_exceeded_view, permission_denied_view, - check_rate_limit, + check_rate_limit, vue_home, ) -from wagtail.admin import urls as wagtailadmin_urls -from wagtail.core import urls as wagtail_urls -from wagtail.documents import urls as wagtaildocs_urls -from grapple import urls as grapple_urls from .api import api_router - def raise_example_error(request): """ raise error to check if it gets logged @@ -36,7 +35,6 @@ def raise_example_error(request): # fmt: off urlpatterns = [ - path("", django_view_authentication_exempt(TemplateView.as_view(template_name="pages/home.html")), name="home"), path('admin/raise_error/', user_passes_test(lambda u: u.is_superuser, login_url='/login/')(raise_example_error), ), path(settings.ADMIN_URL, admin.site.urls), path("checkratelimit/", check_rate_limit), @@ -106,3 +104,8 @@ if settings.DEBUG: import debug_toolbar urlpatterns = [path("__debug__/", include(debug_toolbar.urls))] + urlpatterns + + +# serve everything else via the vue app +urlpatterns += [re_path(r'^.*$', vue_home, name='home')] + diff --git a/server/vbv_lernwelt/core/views.py b/server/vbv_lernwelt/core/views.py index 69fe7e5c..5fe68853 100644 --- a/server/vbv_lernwelt/core/views.py +++ b/server/vbv_lernwelt/core/views.py @@ -1,11 +1,31 @@ # Create your views here. +import requests +from django.conf import settings from django.http import JsonResponse, HttpResponse from django.shortcuts import render +from django.views.decorators.csrf import ensure_csrf_cookie from ratelimit.decorators import ratelimit from vbv_lernwelt.core.middleware.auth import django_view_authentication_exempt +@django_view_authentication_exempt +@ensure_csrf_cookie +def vue_home(request): + if settings.IT_SERVE_VUE: + try: + res = requests.get(f'{settings.IT_SERVE_VUE_URL}{request.get_full_path()}') + headers = res.headers + content_type = headers.get('content-type', 'text/html') + return HttpResponse(res.text, content_type=content_type) + except Exception as e: + print(f'Can not connect to vue dev server at {settings.IT_SERVE_VUE_URL}:', e) + return + + # render index.html from `npm run build` + return render(request, 'index.html', {}) + + def permission_denied_view(request, exception): return render(request, "403.html", status=403) diff --git a/server/vbv_lernwelt/templates/pages/home.html b/server/vbv_lernwelt/templates/pages/home.html deleted file mode 100644 index 7095cd9d..00000000 --- a/server/vbv_lernwelt/templates/pages/home.html +++ /dev/null @@ -1,108 +0,0 @@ -{% extends "base.html" %} - - -{% block content %} -
-
- -
-

Machen Sie hier eine Selbstevaluation

-

Hier steht noch etwas mehr Text

-
-
-
- -
-
- -
-
- image - -
-
- -
-
- image - -
-
- -
-
- image - -
-
-
-

weitere Kurse entdecken und buchen

- -
-
- -{% endblock %}