Django项目灵活配置开发、生产环境的settings

后端
观看:0
文章标签:#django#settings#灵活#生产环境
最后更新:2025年08月08 13:08
为了不频繁修改settings.py文件,导致各种问题,现在需要把原本项目内的settings.py替换为python的包,这样就可以让一套代码,跑不同的环境

开发环境:

本机的开发代码,用的都是localhost设置

生产环境:

线上的服务,需要链接正式数据库,配置静态,以及关闭DEBUG

创建settings包文件夹

包文件夹:如果使用idea(比如pycharm),直接创建包就行

创建了以后,记得把原本的settings.py改为base.py,放进文件夹内

(其实就是一个普通文件夹,里面放一个__init__.py文件和其他代码)

下面是__init__.py的写法,需要根据自己项目的名称,需要根据自己的项目名称修改内容,比如我现在的django项目叫做aiochemserver,就需要读取对应的设置文件

python
import os

# settings/__init__.py
# 根据外部传入的 DJANGO_SETTINGS_MODULE 来决定加载哪套配置

# 获取环境变量 DJANGO_SETTINGS_MODULE,默认为 'aiochemserver.settings.dev'
settings_module = os.getenv('DJANGO_SETTINGS_MODULE', 'aiochemserver.settings.dev')

# 提取最后一段,如 'dev'、'prod'、'test'
env = settings_module.rsplit('.', 1)[-1].lower()

if env in ('prod', 'production'):
    from .prod import *
elif env in ('dev', 'development', 'settings'):
    # 如果变量是 aiochemserver.settings 或者未指定 dev,默认使用 dev
    from .dev import *
else:
    # 其他命名也可以映射到 dev,或者直接抛错提示
    raise ImportError(f"Unknown DJANGO_SETTINGS_MODULE suffix '{env}', cannot load settings")

# 可选:打印当前加载的配置环境,方便调试
print(f"[Django settings] loaded configuration: {env}")

这样可以在启动项目的时候,读取不同的配置

在该目录下,分别创建base.py 、dev.py、 prod.py

路径参考:

image.png

这三个文件,base用来放公共的配置,比如时区、apps的内容等

dev和prod的区别在于,数据库的ip和密码、JWT密钥等敏感信息,生产环境一般都是读取文件,拿到信息,而不会直接写在settings内,所以分开写信息


比如生产环境prod.py内可以写:

python
from .base import *
DEBUG = False
SECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTO", "https")
ALLOWED_HOSTS = [
    "www.aiochem.com",
    "aiochem.com",
]
BASE_HOST_INFO = [
    "https://www.aiochem.com",
    "https://aiochem.com",
]
CORS_ALLOWED_ORIGINS = BASE_HOST_INFO  # 允许哪些跨域浏览器请求(Origin)访问 API
CHANNEL_ALLOWED_HOSTS = BASE_HOST_INFO  # WebSocket Origin 验证 允许哪些 WebSocket Origin 建立连接
CSRF_TRUSTED_ORIGINS = BASE_HOST_INFO  # 信任哪些来源可以携带凭证(Cookie)提交表单
with open("/etc/secret_key.txt") as f:\
  SECRET_KEY = [f.read](http://f.read)().strip()

这些参数根据公司需求,进行设置,为了安全,不要允许全部的请求都通过

而在本地开发环境的dev.py内,可以直接写测试的密钥,允许所有请求

python
from .base import *
from datetime import timedelta
DEBUG = True
ALLOWED_HOSTS = ["*"]
CHANNEL_ALLOWED_HOSTS = ["*"]
CORS_ALLOW_ALL_ORIGINS = True
SECRET_KEY = 'sdkfjhsdkjf5n2u&v4qhphkmb*fdlkasjd65456df3'

在启动项目的时候,如果是生产环境,需要额外指定参数:

我这里使用daphne代理的服务,如果是普通的manage.py启动,也是一样的

shell
DJANGO_SETTINGS_MODULE=aiochemserver.settings.prod daphne -b 0.0.0.0 -p 8001 aiochemserver.asgi:application

显式指定DJANGO_SETTINGS_MODULE为prod

请登录后再发表评论
🔍 快速搜索
文章推荐
基于文本相似性

没有推荐的文章...

文章推荐
化学结构同出现

没有对应的文章...

AioChem © 2025

晋ICP备2025060790号-1