forked from Fediversity/Fediversity
fix settings and add dummy view
This introduces customisation to `settings.py` that - allow controlling the relevant parameters from our systemd wrapper (more brittle and non-obvious than it should be, see TODOs) - correctly configure SASS processing and static file compression (not as easy as it sounds)
This commit is contained in:
parent
7c33e8aaf3
commit
f97dc7e121
6 changed files with 100 additions and 5 deletions
|
@ -10,6 +10,12 @@ For the full list of settings and their values, see
|
|||
https://docs.djangoproject.com/en/4.2/ref/settings/
|
||||
"""
|
||||
|
||||
import sys
|
||||
import os
|
||||
import importlib.util
|
||||
import dj_database_url
|
||||
|
||||
from os import environ as env
|
||||
from pathlib import Path
|
||||
|
||||
# Build paths inside the project like this: BASE_DIR / 'subdir'.
|
||||
|
@ -19,8 +25,22 @@ BASE_DIR = Path(__file__).resolve().parent.parent
|
|||
# Quick-start development settings - unsuitable for production
|
||||
# See https://docs.djangoproject.com/en/4.2/howto/deployment/checklist/
|
||||
|
||||
def get_secret(name: str, encoding: str = "utf-8") -> str:
|
||||
credentials_dir = env.get("CREDENTIALS_DIRECTORY")
|
||||
|
||||
if credentials_dir is None:
|
||||
raise RuntimeError("No credentials directory available.")
|
||||
|
||||
try:
|
||||
with open(f"{credentials_dir}/{name}", encoding=encoding) as f:
|
||||
secret = f.read().removesuffix("\n")
|
||||
except FileNotFoundError:
|
||||
raise RuntimeError(f"No secret named {name} found in {credentials_dir}.")
|
||||
|
||||
return secret
|
||||
|
||||
# SECURITY WARNING: keep the secret key used in production secret!
|
||||
SECRET_KEY = 'django-insecure-9*i_k2o@x-c7w%o!*@b88t%n)eh=c2nj2f2m*-=$gwfn#zoso7'
|
||||
SECRET_KEY = get_secret("SECRET_KEY")
|
||||
|
||||
# SECURITY WARNING: don't run with debug turned on in production!
|
||||
DEBUG = True
|
||||
|
@ -31,12 +51,14 @@ ALLOWED_HOSTS = []
|
|||
# Application definition
|
||||
|
||||
INSTALLED_APPS = [
|
||||
"panel",
|
||||
'django.contrib.admin',
|
||||
'django.contrib.auth',
|
||||
'django.contrib.contenttypes',
|
||||
'django.contrib.sessions',
|
||||
'django.contrib.messages',
|
||||
'django.contrib.staticfiles',
|
||||
'compressor',
|
||||
]
|
||||
|
||||
MIDDLEWARE = [
|
||||
|
@ -72,12 +94,10 @@ WSGI_APPLICATION = 'panel.wsgi.application'
|
|||
|
||||
# Database
|
||||
# https://docs.djangoproject.com/en/4.2/ref/settings/#databases
|
||||
# https://github.com/jazzband/dj-database-url
|
||||
|
||||
DATABASES = {
|
||||
'default': {
|
||||
'ENGINE': 'django.db.backends.sqlite3',
|
||||
'NAME': BASE_DIR / 'db.sqlite3',
|
||||
}
|
||||
'default': dj_database_url.config(),
|
||||
}
|
||||
|
||||
|
||||
|
@ -117,7 +137,35 @@ USE_TZ = True
|
|||
|
||||
STATIC_URL = 'static/'
|
||||
|
||||
STATIC_ROOT = os.path.join(BASE_DIR, "static/")
|
||||
|
||||
STATICFILES_FINDERS = [
|
||||
"django.contrib.staticfiles.finders.FileSystemFinder",
|
||||
"django.contrib.staticfiles.finders.AppDirectoriesFinder",
|
||||
"compressor.finders.CompressorFinder",
|
||||
]
|
||||
|
||||
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.ManifestStaticFilesStorage'
|
||||
|
||||
COMPRESS_PRECOMPILERS = [
|
||||
("text/x-sass", "django_libsass.SassCompiler"),
|
||||
]
|
||||
|
||||
# Default primary key field type
|
||||
# https://docs.djangoproject.com/en/4.2/ref/settings/#default-auto-field
|
||||
|
||||
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
|
||||
|
||||
# Customization via user settings
|
||||
# This must be at the end, as it must be able to override the above
|
||||
# TODO: we may want to do this with a flat environment instead, and get all values from `os.environ.get()`.
|
||||
# this would make it more obvious which moving parts there are, if that environment is specified for development/staging/production in a visible place.
|
||||
user_settings_file = env.get("USER_SETTINGS_FILE", None)
|
||||
if user_settings_file is not None:
|
||||
spec = importlib.util.spec_from_file_location("user_settings", user_settings_file)
|
||||
if spec is None or spec.loader is None:
|
||||
raise RuntimeError("User settings specification failed!")
|
||||
module = importlib.util.module_from_spec(spec)
|
||||
spec.loader.exec_module(module)
|
||||
sys.modules["user_settings"] = module
|
||||
from user_settings import * # noqa: F403 # pyright: ignore [reportMissingImports]
|
||||
|
|
5
panel/src/panel/static/style.sass
Normal file
5
panel/src/panel/static/style.sass
Normal file
|
@ -0,0 +1,5 @@
|
|||
body
|
||||
padding: 0
|
||||
margin: 0
|
||||
font-family: sans-serif
|
||||
box-sizing: border-box
|
29
panel/src/panel/templates/base.html
Normal file
29
panel/src/panel/templates/base.html
Normal file
|
@ -0,0 +1,29 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>{% block title %}Fediversity Panel{% endblock %}</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
|
||||
{% load compress %}
|
||||
{% compress css %}
|
||||
<link rel="stylesheet" type="text/x-sass" href="/static/style.sass" />
|
||||
{% endcompress %}
|
||||
|
||||
{% block extra_head %}{% endblock extra_head %}
|
||||
</head>
|
||||
|
||||
<body>
|
||||
{% block navigation %}
|
||||
<nav>
|
||||
</nav>
|
||||
{% endblock navigation %}
|
||||
|
||||
{% block layout %}
|
||||
<article>
|
||||
{% block content %}{% endblock content %}
|
||||
</article>
|
||||
{% endblock layout %}
|
||||
</body>
|
||||
</html>
|
7
panel/src/panel/templates/index.html
Normal file
7
panel/src/panel/templates/index.html
Normal file
|
@ -0,0 +1,7 @@
|
|||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Fediversity Panel</h1>
|
||||
|
||||
<p>Hello world!</p>
|
||||
{% endblock %}
|
|
@ -16,7 +16,9 @@ Including another URLconf
|
|||
"""
|
||||
from django.contrib import admin
|
||||
from django.urls import path
|
||||
from panel import views
|
||||
|
||||
urlpatterns = [
|
||||
path('admin/', admin.site.urls),
|
||||
path('', views.Index.as_view(), name='index'),
|
||||
]
|
||||
|
|
4
panel/src/panel/views.py
Normal file
4
panel/src/panel/views.py
Normal file
|
@ -0,0 +1,4 @@
|
|||
from django.views.generic import TemplateView
|
||||
|
||||
class Index(TemplateView):
|
||||
template_name = 'index.html'
|
Loading…
Add table
Reference in a new issue