Cài đặt từ môi trường
Thuộc phần API JSON trong hành trình Django của Coddy. Bài học 18 trên 19.
Sau khi trang web của bạn được triển khai, tức là được sao chép lên một máy chủ trên internet, bạn cần thay đổi ba thiết lập. DEBUG = True để lộ code và mọi mẫu URL cho bất kỳ ai. SECRET_KEY dùng để ký các giá trị mà trang web cần tin cậy, chẳng hạn như liên kết đặt lại mật khẩu và cookie đã ký, vì vậy không thể để nó trong code mà người khác đọc được. ALLOWED_HOSTS liệt kê các tên miền mà trang web phục vụ.
Cách làm thông thường là đọc các biến này từ biến môi trường (environment variables), tức là các giá trị máy chủ cung cấp cho chương trình khi khởi động. os.environ.get(name, default) đọc một biến, còn giá trị mặc định là giá trị máy tính của bạn nhận được:
PAGE_SIZE = int(os.environ.get("PAGE_SIZE", "20"))
MAINTENANCE = os.environ.get("MAINTENANCE", "no") == "yes"Biến môi trường luôn là chuỗi, nên hãy chuyển nó sang kiểu dữ liệu bạn cần: dùng int() cho số, phép so sánh để tạo giá trị boolean thực sự, và split(",") để tạo danh sách. Hãy chọn giá trị mặc định an toàn: nếu quên đặt biến, DEBUG sẽ ở trạng thái tắt.
Thử thách
Trung bìnhĐọc ba cài đặt từ môi trường.
- Ở đầu
mysite/settings.py, thêmimport os. - Thay các dòng
SECRET_KEY,DEBUGvàALLOWED_HOSTSban đầu.SECRET_KEYlấy từDJANGO_SECRET_KEY, mặc định là"django-insecure-change-me".DEBUGchỉ làTruekhiDJANGO_DEBUGcó giá trị văn bản là"True".ALLOWED_HOSTSlàDJANGO_ALLOWED_HOSTSđược tách tại các dấu phẩy, mặc định làlocalhost,127.0.0.1.
Mở /nope/: bạn chỉ thấy Not Found, không có danh sách mẫu URL.
Tự làm thử
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/"
Tất cả bài học trong API JSON
Tự luyện tập: Playground Django