Menu
CoddyTech

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.

challenge icon

Thử thách

Trung bình

Đọc ba cài đặt từ môi trường.

  1. Ở đầu mysite/settings.py, thêm import os.
  2. Thay các dòng SECRET_KEY, DEBUG và ALLOWED_HOSTS ban đầu. SECRET_KEY lấy từ DJANGO_SECRET_KEY, mặc định là "django-insecure-change-me". DEBUG chỉ là True khi DJANGO_DEBUG có giá trị văn bản là "True". ALLOWED_HOSTS là 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