从环境中读取设置
本课属于 Coddy Django 学习旅程的“JSON API”单元。第 18 课,共 19 课。
网站部署到互联网上的服务器后,有三项设置必须更改。DEBUG = True会向任何人显示你的代码和所有 URL 模式。SECRET_KEY用于签署网站必须信任的值,例如密码重置链接和签名 Cookie,因此不能把它放在别人能看到的代码中。ALLOWED_HOSTS列出了网站提供服务的域名。
通常的做法是从环境变量中读取这些值,服务器会在程序启动时提供这些值。os.environ.get(name, default)可以读取一个环境变量,默认值就是你的电脑会使用的值:
PAGE_SIZE = int(os.environ.get("PAGE_SIZE", "20"))
MAINTENANCE = os.environ.get("MAINTENANCE", "no") == "yes"环境变量始终是字符串,所以要把它转换成所需的数据类型:用int()转换为数字,用比较操作得到布尔值,用split(",")转换为列表。选择安全的默认值:如果忘记设置变量,DEBUG就会保持关闭。
挑战
中等从环境中读取三个设置。
- 在
mysite/settings.py的顶部添加import os。 - 替换初始代码中的
SECRET_KEY、DEBUG和ALLOWED_HOSTS行。SECRET_KEY从DJANGO_SECRET_KEY获取,默认值为"django-insecure-change-me"。只有当DJANGO_DEBUG的文本值为"True"时,DEBUG才为True。ALLOWED_HOSTS从DJANGO_ALLOWED_HOSTS获取,并按逗号拆分,默认值为localhost,127.0.0.1。
打开 /nope/:你只会看到 Not Found,不会看到 URL 模式列表。
亲手试试
from pathlib import Path
BASE_DIR = Path(__file__).resolve().parent.parent
SECRET_KEY = "django-insecure-change-me"
DEBUG = True
ALLOWED_HOSTS = []
INSTALLED_APPS = [
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
"tasks",
]
MIDDLEWARE = [
"django.middleware.security.SecurityMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",
"django.middleware.common.CommonMiddleware",
"django.middleware.csrf.CsrfViewMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
"django.contrib.messages.middleware.MessageMiddleware",
"django.middleware.clickjacking.XFrameOptionsMiddleware",
]
ROOT_URLCONF = "mysite.urls"
TEMPLATES = [
{
"BACKEND": "django.template.backends.django.DjangoTemplates",
"DIRS": [],
"APP_DIRS": True,
"OPTIONS": {
"context_processors": [
"django.template.context_processors.request",
"django.contrib.auth.context_processors.auth",
"django.contrib.messages.context_processors.messages",
],
},
},
]
DATABASES = {
"default": {
"ENGINE": "django.db.backends.sqlite3",
"NAME": BASE_DIR / "db.sqlite3",
}
}
LANGUAGE_CODE = "en-us"
TIME_ZONE = "UTC"
USE_I18N = True
USE_TZ = True
STATIC_URL = "static/"
JSON API中的所有课
自己练习: Django 在线编辑器