mirror of
https://github.com/lemeow125/DRF_Template.git
synced 2025-09-18 05:29:37 +08:00
Reimplement caching
This commit is contained in:
parent
bae2cc653e
commit
d99c82bef4
7 changed files with 89 additions and 5 deletions
14
.env.sample
14
.env.sample
|
@ -29,3 +29,17 @@ BACKEND_SMTP_FROM_ADDRESS="admin@test.com"
|
||||||
|
|
||||||
# docker-compose.yml
|
# docker-compose.yml
|
||||||
BACKEND_PORT=8000
|
BACKEND_PORT=8000
|
||||||
|
|
||||||
|
# Cache
|
||||||
|
BACKEND_CACHE_HOST="redis"
|
||||||
|
BACKEND_CACHE_PORT="6379"
|
||||||
|
BACKEND_CACHE_USERNAME="REPLACE-ME"
|
||||||
|
BACKEND_CACHE_PASSWORD="REPLACE-ME"
|
||||||
|
|
||||||
|
# DEBUG Variables: Only used in development
|
||||||
|
BACKEND_PASSWORD="REPLACE-ME"
|
||||||
|
|
||||||
|
|
||||||
|
# # CACHE
|
||||||
|
CACHE_USERNAME="REPLACE-ME"
|
||||||
|
CACHE_PASSWORD="REPLACE-ME"
|
|
@ -13,6 +13,15 @@ services:
|
||||||
volumes:
|
volumes:
|
||||||
- ./src:/app/src # NOTE: Do not hot reload the entire /app folder as it will break the .venv
|
- ./src:/app/src # NOTE: Do not hot reload the entire /app folder as it will break the .venv
|
||||||
|
|
||||||
|
# Cache
|
||||||
|
redis:
|
||||||
|
image: redis:latest
|
||||||
|
restart: always
|
||||||
|
environment:
|
||||||
|
- REDIS_USERNAME=${CACHE_USERNAME}
|
||||||
|
- REDIS_PASSWORD=${CACHE_PASSWORD}
|
||||||
|
- REDIS_DISABLE_DEFAULT_USER="true"
|
||||||
|
|
||||||
# Email Testing Server
|
# Email Testing Server
|
||||||
# http://localhost:8025
|
# http://localhost:8025
|
||||||
inbucket:
|
inbucket:
|
||||||
|
@ -27,4 +36,3 @@ services:
|
||||||
- INBUCKET_WEB_ADDR=0.0.0.0:8025
|
- INBUCKET_WEB_ADDR=0.0.0.0:8025
|
||||||
- INBUCKET_STORAGE_TYPE=memory
|
- INBUCKET_STORAGE_TYPE=memory
|
||||||
- INBUCKET_STORAGE_MAILBOXMSGCAP=2000
|
- INBUCKET_STORAGE_MAILBOXMSGCAP=2000
|
||||||
|
|
||||||
|
|
|
@ -6,9 +6,19 @@ services:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: Dockerfile
|
dockerfile: Dockerfile
|
||||||
image: git.06222001.xyz/keannu125/drf_template:latest
|
image: git.06222001.xyz/keannu125/drf_template:latest
|
||||||
|
restart: always
|
||||||
ports:
|
ports:
|
||||||
- "${BACKEND_PORT}:8000"
|
- "${BACKEND_PORT}:8000"
|
||||||
environment:
|
environment:
|
||||||
- RUN_TYPE=api
|
- RUN_TYPE=api
|
||||||
volumes:
|
volumes:
|
||||||
- ./src:/app/src # Bind mount for persistent schema.yml and static files
|
- ./src:/app/src # Bind mount for persistent schema.yml and static files
|
||||||
|
|
||||||
|
# Cache
|
||||||
|
redis:
|
||||||
|
image: redis:latest
|
||||||
|
restart: always
|
||||||
|
environment:
|
||||||
|
- REDIS_USERNAME=${CACHE_USERNAME}
|
||||||
|
- REDIS_PASSWORD=${CACHE_PASSWORD}
|
||||||
|
- REDIS_DISABLE_DEFAULT_USER="true"
|
|
@ -22,4 +22,5 @@ dependencies = [
|
||||||
"django-unfold>=0.65.0",
|
"django-unfold>=0.65.0",
|
||||||
"gunicorn>=23.0.0",
|
"gunicorn>=23.0.0",
|
||||||
"django-cors-headers>=4.7.0",
|
"django-cors-headers>=4.7.0",
|
||||||
|
"django-redis>=6.0.0",
|
||||||
]
|
]
|
||||||
|
|
|
@ -43,8 +43,10 @@ class Config(BaseModel):
|
||||||
default=False,
|
default=False,
|
||||||
description="Whether to serve media files locally as oppossed to using a cloud storage solution.",
|
description="Whether to serve media files locally as oppossed to using a cloud storage solution.",
|
||||||
)
|
)
|
||||||
SMTP_HOST: StrictStr = Field(required=True, description="SMTP server address")
|
SMTP_HOST: StrictStr = Field(
|
||||||
SMTP_PORT: int = Field(default=587, description="SMTP server port (default: 587)")
|
required=True, description="SMTP server address")
|
||||||
|
SMTP_PORT: int = Field(
|
||||||
|
default=587, description="SMTP server port (default: 587)")
|
||||||
SMTP_USE_TLS: bool = Field(
|
SMTP_USE_TLS: bool = Field(
|
||||||
default=True, description="Whether to use TLS for SMTP connections"
|
default=True, description="Whether to use TLS for SMTP connections"
|
||||||
)
|
)
|
||||||
|
@ -66,6 +68,18 @@ class Config(BaseModel):
|
||||||
DEBUG_USER_PASSWORD: StrictStr = Field(
|
DEBUG_USER_PASSWORD: StrictStr = Field(
|
||||||
required=True, description="Password for test users created during development"
|
required=True, description="Password for test users created during development"
|
||||||
)
|
)
|
||||||
|
CACHE_USERNAME: StrictStr = Field(
|
||||||
|
required=True, description="Cache server authentication username"
|
||||||
|
)
|
||||||
|
CACHE_PASSWORD: StrictStr = Field(
|
||||||
|
required=True, description="Cache server authentication password"
|
||||||
|
)
|
||||||
|
CACHE_HOST: StrictStr = Field(
|
||||||
|
required=True, description="Server host used for caching"
|
||||||
|
)
|
||||||
|
CACHE_PORT: int = Field(
|
||||||
|
required=True, description="Server port used for caching"
|
||||||
|
)
|
||||||
|
|
||||||
@field_validator("CORS_ORIGINS", "ALLOWED_HOSTS", mode="before")
|
@field_validator("CORS_ORIGINS", "ALLOWED_HOSTS", mode="before")
|
||||||
def parse_list(cls, v):
|
def parse_list(cls, v):
|
||||||
|
|
|
@ -242,8 +242,21 @@ SPECTACULAR_SETTINGS = {
|
||||||
"SERVE_INCLUDE_SCHEMA": False,
|
"SERVE_INCLUDE_SCHEMA": False,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
# Pygraphviz
|
# Pygraphviz
|
||||||
GRAPH_MODELS = {
|
GRAPH_MODELS = {
|
||||||
"all_applications": True,
|
"all_applications": True,
|
||||||
"group_models": True,
|
"group_models": True,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# Caching
|
||||||
|
CACHES = {
|
||||||
|
"default": {
|
||||||
|
"BACKEND": "django_redis.cache.RedisCache",
|
||||||
|
"LOCATION": f"redis://{config.CACHE_USERNAME}:{config.CACHE_PASSWORD}@{config.CACHE_HOST}:{config.CACHE_PORT}/1",
|
||||||
|
"OPTIONS": {
|
||||||
|
"CLIENT_CLASS": "django_redis.client.DefaultClient",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
24
uv.lock
generated
24
uv.lock
generated
|
@ -235,6 +235,19 @@ wheels = [
|
||||||
{ url = "https://files.pythonhosted.org/packages/64/96/d967ca440d6a8e3861120f51985d8e5aec79b9a8bdda16041206adfe7adc/django_extensions-4.1-py3-none-any.whl", hash = "sha256:0699a7af28f2523bf8db309a80278519362cd4b6e1fd0a8cd4bf063e1e023336", size = 232980, upload-time = "2025-04-11T01:15:37.701Z" },
|
{ url = "https://files.pythonhosted.org/packages/64/96/d967ca440d6a8e3861120f51985d8e5aec79b9a8bdda16041206adfe7adc/django_extensions-4.1-py3-none-any.whl", hash = "sha256:0699a7af28f2523bf8db309a80278519362cd4b6e1fd0a8cd4bf063e1e023336", size = 232980, upload-time = "2025-04-11T01:15:37.701Z" },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "django-redis"
|
||||||
|
version = "6.0.0"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
dependencies = [
|
||||||
|
{ name = "django" },
|
||||||
|
{ name = "redis" },
|
||||||
|
]
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/08/53/dbcfa1e528e0d6c39947092625b2c89274b5d88f14d357cee53c4d6dbbd4/django_redis-6.0.0.tar.gz", hash = "sha256:2d9cb12a20424a4c4dde082c6122f486628bae2d9c2bee4c0126a4de7fda00dd", size = 56904, upload-time = "2025-06-17T18:15:46.376Z" }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/7e/79/055dfcc508cfe9f439d9f453741188d633efa9eab90fc78a67b0ab50b137/django_redis-6.0.0-py3-none-any.whl", hash = "sha256:20bf0063a8abee567eb5f77f375143c32810c8700c0674ced34737f8de4e36c0", size = 33687, upload-time = "2025-06-17T18:15:34.165Z" },
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "django-rest-framework"
|
name = "django-rest-framework"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
|
@ -358,6 +371,7 @@ dependencies = [
|
||||||
{ name = "django" },
|
{ name = "django" },
|
||||||
{ name = "django-cors-headers" },
|
{ name = "django-cors-headers" },
|
||||||
{ name = "django-extensions" },
|
{ name = "django-extensions" },
|
||||||
|
{ name = "django-redis" },
|
||||||
{ name = "django-rest-framework" },
|
{ name = "django-rest-framework" },
|
||||||
{ name = "django-silk" },
|
{ name = "django-silk" },
|
||||||
{ name = "django-unfold" },
|
{ name = "django-unfold" },
|
||||||
|
@ -379,6 +393,7 @@ requires-dist = [
|
||||||
{ name = "django", specifier = ">=5.2.5" },
|
{ name = "django", specifier = ">=5.2.5" },
|
||||||
{ name = "django-cors-headers", specifier = ">=4.7.0" },
|
{ name = "django-cors-headers", specifier = ">=4.7.0" },
|
||||||
{ name = "django-extensions", specifier = ">=4.1" },
|
{ name = "django-extensions", specifier = ">=4.1" },
|
||||||
|
{ name = "django-redis", specifier = ">=6.0.0" },
|
||||||
{ name = "django-rest-framework", specifier = ">=0.1.0" },
|
{ name = "django-rest-framework", specifier = ">=0.1.0" },
|
||||||
{ name = "django-silk", specifier = ">=5.4.2" },
|
{ name = "django-silk", specifier = ">=5.4.2" },
|
||||||
{ name = "django-unfold", specifier = ">=0.65.0" },
|
{ name = "django-unfold", specifier = ">=0.65.0" },
|
||||||
|
@ -635,6 +650,15 @@ wheels = [
|
||||||
{ url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446, upload-time = "2024-08-06T20:33:04.33Z" },
|
{ url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446, upload-time = "2024-08-06T20:33:04.33Z" },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "redis"
|
||||||
|
version = "6.4.0"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/0d/d6/e8b92798a5bd67d659d51a18170e91c16ac3b59738d91894651ee255ed49/redis-6.4.0.tar.gz", hash = "sha256:b01bc7282b8444e28ec36b261df5375183bb47a07eb9c603f284e89cbc5ef010", size = 4647399, upload-time = "2025-08-07T08:10:11.441Z" }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/e8/02/89e2ed7e85db6c93dfa9e8f691c5087df4e3551ab39081a4d7c6d1f90e05/redis-6.4.0-py3-none-any.whl", hash = "sha256:f0544fa9604264e9464cdf4814e7d4830f74b165d52f2a330a760a88dd248b7f", size = 279847, upload-time = "2025-08-07T08:10:09.84Z" },
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "referencing"
|
name = "referencing"
|
||||||
version = "0.36.2"
|
version = "0.36.2"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue