chore: integrate django-environ, create .env-example, and move sensitive settings to .env

This commit is contained in:
Chneemann 2025-04-22 13:08:31 +02:00
parent 3b2f8aee30
commit 66bbb57548
7 changed files with 49 additions and 45 deletions

2
backend/.gitignore vendored
View file

@ -147,4 +147,4 @@ GitHub.sublime-settings
videoflix/users/migrations videoflix/users/migrations
# Statics # Statics
videoflix/staticfiles staticfiles

View file

@ -5,6 +5,7 @@ click==8.1.7
diff-match-patch==20230430 diff-match-patch==20230430
Django==5.0.8 Django==5.0.8
django-cors-headers==4.4.0 django-cors-headers==4.4.0
django-environ==0.12.0
django-grip==3.5.0 django-grip==3.5.0
django-import-export==4.1.1 django-import-export==4.1.1
django-redis==5.4.0 django-redis==5.4.0
@ -23,7 +24,6 @@ psutil==6.0.0
psycopg==3.2.6 psycopg==3.2.6
pubcontrol==3.5.0 pubcontrol==3.5.0
PyJWT==2.9.0 PyJWT==2.9.0
python-decouple==3.8
redis==5.0.8 redis==5.0.8
requests==2.32.3 requests==2.32.3
rq==1.16.2 rq==1.16.2

View file

@ -34,7 +34,7 @@
} }
</style> </style>
<body> <body>
<div class="center"><img src="https://andre-kempf.com/videoflix-logo.png" alt=""></div> <div class="center"><img src="https://videoflix.andre-kempf.com/assets/img/videoflix-logo.png" alt="Videoflix"></div>
<p>Dear {{ name }},</p> <p>Dear {{ name }},</p>
<p> <p>
We recently received a request to reset your password. If you made this request, please click on the following link to reset your password: We recently received a request to reset your password. If you made this request, please click on the following link to reset your password:

View file

@ -34,7 +34,7 @@
} }
</style> </style>
<body> <body>
<div class="center"><img src="https://andre-kempf.com/videoflix-logo.png" alt=""></div> <div class="center"><img src="https://videoflix.andre-kempf.com/assets/img/videoflix-logo.png" alt="Videoflix"></div>
<p>Dear {{ name }},</p> <p>Dear {{ name }},</p>
<p> <p>
Thank you for registering with Videoflix. To complete your registration Thank you for registering with Videoflix. To complete your registration

View file

@ -0,0 +1,13 @@
# General settings
DEBUG=False
SECRET_KEY=secret_key
# E-mail settings
EMAIL_HOST_USER=example@gmail.com
EMAIL_HOST_PASSWORD=password
# Sentry settings
SENTRY_DSN=sentry_dns

View file

@ -11,32 +11,14 @@ https://docs.djangoproject.com/en/5.0/ref/settings/
""" """
import os import os
from pathlib import Path
from decouple import config
import sentry_sdk import sentry_sdk
from pathlib import Path
from environ import Env
from sentry_sdk.integrations.django import DjangoIntegration
# Build paths inside the project like this: BASE_DIR / 'subdir'. # Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent BASE_DIR = Path(__file__).resolve().parent.parent
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/5.0/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'django-insecure-*o%q)*3l+9^fs!m0z_h=z9bc)su=%)fv$@ktb#pza-pvi^z*en'
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
# EMAIL
EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = config('EMAIL_HOST_USER', default='')
EMAIL_HOST_PASSWORD = config('EMAIL_HOST_PASSWORD', default='')
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
DEFAULT_FROM_EMAIL = 'noreply@videoflix.com'
ALLOWED_HOSTS = [ ALLOWED_HOSTS = [
'videoflix-api.andre-kempf.com', 'videoflix-api.andre-kempf.com',
'45.157.177.172', '45.157.177.172',
@ -189,7 +171,7 @@ USE_TZ = True
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATIC_URL = 'static/' STATIC_URL = '/static/'
IMPORT_EXPORT_USE_TRANSACTIONS = True IMPORT_EXPORT_USE_TRANSACTIONS = True
@ -217,10 +199,29 @@ AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend', 'django.contrib.auth.backends.ModelBackend',
) )
# Environment variables
env = Env()
Env.read_env()
DEBUG = env.bool('DEBUG', default=False)
SECRET_KEY = env('SECRET_KEY')
# Mail
EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = env('EMAIL_HOST_USER', default='')
EMAIL_HOST_PASSWORD = env('EMAIL_HOST_PASSWORD', default='')
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
DEFAULT_FROM_EMAIL = 'noreply@videoflix.andre-kempf.com'
# Sentry # Sentry
sentry_sdk.init( sentry_sdk.init(
dsn="https://f9cac097dbb7a0d104f07d347e1bd470@o4507955559464960.ingest.de.sentry.io/4507955586138192", dsn=os.getenv("SENTRY_DSN"),
integrations=[DjangoIntegration()],
traces_sample_rate=1.0, traces_sample_rate=1.0,
profiles_sample_rate=1.0, profiles_sample_rate=1.0,
) )

View file

@ -1,23 +1,8 @@
"""
URL configuration for videoflix project.
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/5.0/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin from django.contrib import admin
from django.urls import path, include from django.urls import path, include
from django.conf import settings from django.conf import settings
from django.conf.urls.static import static from django.conf.urls.static import static
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from user_app import views as user_views from user_app import views as user_views
from auth_app.views import ( from auth_app.views import (
LoginView, LoginView,
@ -29,7 +14,6 @@ from auth_app.views import (
ChangePasswordView ChangePasswordView
) )
from video_app import views as video_views from video_app import views as video_views
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns = [ urlpatterns = [
path('admin/', admin.site.urls), path('admin/', admin.site.urls),
@ -54,4 +38,10 @@ urlpatterns = [
path('auth/verify-email/', VerifyEmailView.as_view(), name='verify_email'), path('auth/verify-email/', VerifyEmailView.as_view(), name='verify_email'),
path('auth/forgot-password/', ForgotPasswordView.as_view(), name='forgot_password'), path('auth/forgot-password/', ForgotPasswordView.as_view(), name='forgot_password'),
path('auth/change-password/', ChangePasswordView.as_view(), name='change_password'), path('auth/change-password/', ChangePasswordView.as_view(), name='change_password'),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) + staticfiles_urlpatterns() ]
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns += staticfiles_urlpatterns()