Skip to content

Commit 510a730

Browse files
committed
Add environment and settings templates
1 parent b1fa399 commit 510a730

2 files changed

Lines changed: 275 additions & 0 deletions

File tree

.env.example

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# Copy this file to .env and replace values for your local environment.
2+
# Do not commit the real .env file.
3+
4+
# Django
5+
SECRET_KEY=django-insecure-change-me-for-local-development-only
6+
DEBUG=True
7+
ALLOWED_HOSTS=127.0.0.1,localhost
8+
DJANGO_SETTINGS_MODULE=config.settings
9+
10+
# Database
11+
# PostgreSQL example:
12+
DB_ENGINE=django.db.backends.postgresql
13+
DB_NAME=onrecord
14+
DB_USER=postgres
15+
DB_PASSWORD=
16+
DB_HOST=127.0.0.1
17+
DB_PORT=5432
18+
19+
# For SQLite local testing, you can use:
20+
# DB_ENGINE=django.db.backends.sqlite3
21+
# DB_NAME=db.sqlite3
22+
23+
# Email (Naver SMTP)
24+
EMAIL_HOST_USER=
25+
EMAIL_HOST_PASSWORD=
26+
27+
# Naver OAuth
28+
NAVER_CLIENT_ID=
29+
NAVER_SECRET=
30+
NAVER_REDIRECT_URI=http://127.0.0.1:8000/users/naver/callback/
31+
32+
# Kakao OAuth
33+
KAKAO_CLIENT_ID=
34+
KAKAO_SECRET=
35+
KAKAO_REDIRECT_URI=http://127.0.0.1:8000/users/kakao/callback/
36+
37+
# Google OAuth
38+
GOOGLE_CLIENT_ID=
39+
GOOGLE_SECRET=
40+
41+
# OpenAI
42+
OPENAI_API_KEY=

config/settings_example.py

Lines changed: 233 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,233 @@
1+
"""
2+
Example Django settings for local development.
3+
4+
Copy this file to config/settings.py, then copy .env.example to .env and
5+
replace the environment values.
6+
"""
7+
8+
from pathlib import Path
9+
import os
10+
import sys
11+
12+
import environ
13+
14+
15+
BASE_DIR = Path(__file__).resolve().parent.parent
16+
17+
env = environ.Env()
18+
environ.Env.read_env(os.path.join(BASE_DIR, ".env"))
19+
20+
21+
# Security
22+
SECRET_KEY = env("SECRET_KEY", default="django-insecure-change-me-for-local-development-only")
23+
DEBUG = env.bool("DEBUG", default=True)
24+
ALLOWED_HOSTS = env.list("ALLOWED_HOSTS", default=["127.0.0.1", "localhost"])
25+
26+
27+
# Application definition
28+
INSTALLED_APPS = [
29+
"django.contrib.admin",
30+
"django.contrib.auth",
31+
"django.contrib.contenttypes",
32+
"django.contrib.sessions",
33+
"django.contrib.messages",
34+
"django.contrib.staticfiles",
35+
"django.contrib.sites",
36+
"users",
37+
"diaries",
38+
"replies",
39+
"communities",
40+
"allauth",
41+
"allauth.account",
42+
"allauth.socialaccount",
43+
"allauth.socialaccount.providers.naver",
44+
"allauth.socialaccount.providers.kakao",
45+
"allauth.socialaccount.providers.google",
46+
]
47+
48+
MIDDLEWARE = [
49+
"django.middleware.security.SecurityMiddleware",
50+
"django.contrib.sessions.middleware.SessionMiddleware",
51+
"django.middleware.common.CommonMiddleware",
52+
"django.middleware.csrf.CsrfViewMiddleware",
53+
"django.contrib.auth.middleware.AuthenticationMiddleware",
54+
"django.contrib.messages.middleware.MessageMiddleware",
55+
"django.middleware.clickjacking.XFrameOptionsMiddleware",
56+
"allauth.account.middleware.AccountMiddleware",
57+
]
58+
59+
ROOT_URLCONF = "config.urls"
60+
61+
TEMPLATES = [
62+
{
63+
"BACKEND": "django.template.backends.django.DjangoTemplates",
64+
"DIRS": [BASE_DIR / "templates"],
65+
"APP_DIRS": True,
66+
"OPTIONS": {
67+
"context_processors": [
68+
"django.template.context_processors.debug",
69+
"django.template.context_processors.request",
70+
"django.contrib.auth.context_processors.auth",
71+
"django.contrib.messages.context_processors.messages",
72+
],
73+
},
74+
},
75+
]
76+
77+
WSGI_APPLICATION = "config.wsgi.application"
78+
79+
80+
# Database
81+
DB_ENGINE = env("DB_ENGINE", default="django.db.backends.postgresql")
82+
DB_NAME = env("DB_NAME", default="onrecord")
83+
84+
if DB_ENGINE == "django.db.backends.sqlite3":
85+
database_name = DB_NAME
86+
if database_name == ":memory:":
87+
sqlite_name = database_name
88+
else:
89+
sqlite_name = BASE_DIR / database_name
90+
91+
DATABASES = {
92+
"default": {
93+
"ENGINE": DB_ENGINE,
94+
"NAME": sqlite_name,
95+
}
96+
}
97+
else:
98+
DATABASES = {
99+
"default": {
100+
"ENGINE": DB_ENGINE,
101+
"NAME": DB_NAME,
102+
"USER": env("DB_USER", default="postgres"),
103+
"PASSWORD": env("DB_PASSWORD", default=""),
104+
"HOST": env("DB_HOST", default="127.0.0.1"),
105+
"PORT": env.int("DB_PORT", default=5432),
106+
}
107+
}
108+
109+
if "test" in sys.argv:
110+
DATABASES["default"] = {
111+
"ENGINE": "django.db.backends.sqlite3",
112+
"NAME": ":memory:",
113+
}
114+
115+
116+
# Password validation
117+
AUTH_PASSWORD_VALIDATORS = [
118+
{
119+
"NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator",
120+
},
121+
{
122+
"NAME": "django.contrib.auth.password_validation.MinimumLengthValidator",
123+
},
124+
{
125+
"NAME": "django.contrib.auth.password_validation.CommonPasswordValidator",
126+
},
127+
{
128+
"NAME": "django.contrib.auth.password_validation.NumericPasswordValidator",
129+
},
130+
]
131+
132+
133+
# Internationalization
134+
LANGUAGE_CODE = "ko-kr"
135+
TIME_ZONE = "Asia/Seoul"
136+
USE_I18N = True
137+
USE_TZ = True
138+
139+
140+
# Static and media files
141+
STATIC_URL = "/static/"
142+
STATIC_ROOT = os.path.join(BASE_DIR, "staticfiles")
143+
STATICFILES_DIRS = [
144+
BASE_DIR / "static",
145+
]
146+
147+
MEDIA_URL = "/media/"
148+
MEDIA_ROOT = os.path.join(BASE_DIR, "media")
149+
150+
DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"
151+
AUTH_USER_MODEL = "users.User"
152+
SITE_ID = 1
153+
154+
155+
# Authentication
156+
AUTHENTICATION_BACKENDS = [
157+
"django.contrib.auth.backends.ModelBackend",
158+
"allauth.account.auth_backends.AuthenticationBackend",
159+
]
160+
161+
ACCOUNT_EMAIL_REQUIRED = True
162+
ACCOUNT_EMAIL_VERIFICATION = "optional"
163+
ACCOUNT_CONFIRM_EMAIL_ON_GET = True
164+
ACCOUNT_AUTHENTICATION_METHOD = "email"
165+
ACCOUNT_USER_MODEL_USERNAME_FIELD = None
166+
ACCOUNT_USERNAME_REQUIRED = False
167+
ACCOUNT_ADAPTER = "users.adapters.MyAccountAdapter"
168+
169+
LOGIN_REDIRECT_URL = "/"
170+
ACCOUNT_LOGOUT_REDIRECT_URL = "/"
171+
ACCOUNT_LOGOUT_ON_GET = True
172+
173+
SOCIALACCOUNT_QUERY_EMAIL = True
174+
SOCIALACCOUNT_EMAIL_REQUIRED = True
175+
SOCIALACCOUNT_ADAPTER = "users.adapters.CustomSocialAccountAdapter"
176+
SOCIALACCOUNT_LOGIN_ON_GET = True
177+
178+
SOCIALACCOUNT_PROVIDERS = {
179+
"naver": {
180+
"APP": {
181+
"client_id": env("NAVER_CLIENT_ID", default=""),
182+
"secret": env("NAVER_SECRET", default=""),
183+
},
184+
},
185+
"kakao": {
186+
"APP": {
187+
"client_id": env("KAKAO_CLIENT_ID", default=""),
188+
"secret": env("KAKAO_SECRET", default=""),
189+
},
190+
"SCOPE": [
191+
"account_email",
192+
"profile_nickname",
193+
],
194+
},
195+
"google": {
196+
"APP": {
197+
"client_id": env("GOOGLE_CLIENT_ID", default=""),
198+
"secret": env("GOOGLE_SECRET", default=""),
199+
},
200+
"SCOPE": [
201+
"profile",
202+
"email",
203+
],
204+
"AUTH_PARAMS": {
205+
"access_type": "online",
206+
},
207+
},
208+
}
209+
210+
211+
# Email
212+
EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"
213+
EMAIL_HOST = "smtp.naver.com"
214+
EMAIL_PORT = 587
215+
EMAIL_USE_TLS = True
216+
EMAIL_HOST_USER = env("EMAIL_HOST_USER", default="")
217+
EMAIL_HOST_PASSWORD = env("EMAIL_HOST_PASSWORD", default="")
218+
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
219+
220+
221+
# External APIs
222+
OPENAI_API_KEY = env("OPENAI_API_KEY", default="")
223+
224+
225+
# Deployment-related defaults
226+
CSRF_TRUSTED_ORIGINS = [
227+
"https://onrecord.kr",
228+
"http://onrecord.kr",
229+
"https://www.onrecord.kr",
230+
"http://www.onrecord.kr",
231+
]
232+
233+
SECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTO", "https")

0 commit comments

Comments
 (0)