Django: Không đúng đã định cấu hình: Cài đặt SECRET_KEY không được để trống


99

Tôi đang cố gắng thiết lập nhiều tệp cài đặt (phát triển, sản xuất, ..) bao gồm một số cài đặt cơ sở. Không thể thành công mặc dù. Khi tôi cố gắng chạy, ./manage.py runservertôi gặp lỗi sau:

(cb)clime@den /srv/www/cb $ ./manage.py runserver
ImproperlyConfigured: The SECRET_KEY setting must not be empty.

Đây là mô-đun cài đặt của tôi:

(cb)clime@den /srv/www/cb/cb/settings $ ll
total 24
-rw-rw-r--. 1 clime clime 8230 Oct  2 02:56 base.py
-rw-rw-r--. 1 clime clime  489 Oct  2 03:09 development.py
-rw-rw-r--. 1 clime clime   24 Oct  2 02:34 __init__.py
-rw-rw-r--. 1 clime clime  471 Oct  2 02:51 production.py

Cài đặt cơ sở (chứa SECRET_KEY):

(cb)clime@den /srv/www/cb/cb/settings $ cat base.py:
# Django base settings for cb project.

import django.conf.global_settings as defaults

DEBUG = False
TEMPLATE_DEBUG = False

INTERNAL_IPS = ('127.0.0.1',)

ADMINS = (
    ('clime', 'clime7@gmail.com'),
)

MANAGERS = ADMINS

DATABASES = {
    'default': {
        #'ENGINE': 'django.db.backends.postgresql_psycopg2', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'cwu',                   # Or path to database file if using sqlite3.
        'USER': 'clime',                 # Not used with sqlite3.
        'PASSWORD': '',                  # Not used with sqlite3.
        'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
    }
}

# Local time zone for this installation. Choices can be found here:
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
# although not all choices may be available on all operating systems.
# In a Windows environment this must be set to your system time zone.
TIME_ZONE = 'Europe/Prague'

# Language code for this installation. All choices can be found here:
# http://www.i18nguy.com/unicode/language-identifiers.html
LANGUAGE_CODE = 'en-us'

SITE_ID = 1

# If you set this to False, Django will make some optimizations so as not
# to load the internationalization machinery.
USE_I18N = False

# If you set this to False, Django will not format dates, numbers and
# calendars according to the current locale.
USE_L10N = False # TODO: make this true and accustom date time input

DATE_INPUT_FORMATS = defaults.DATE_INPUT_FORMATS + ('%d %b %y', '%d %b, %y') # + ('25 Oct 13', '25 Oct, 13')

# If you set this to False, Django will not use timezone-aware datetimes.
USE_TZ = True

# Absolute filesystem path to the directory that will hold user-uploaded files.
# Example: "/home/media/media.lawrence.com/media/"
MEDIA_ROOT = '/srv/www/cb/media'

# URL that handles the media served from MEDIA_ROOT. Make sure to use a
# trailing slash.
# Examples: "http://media.lawrence.com/media/", "http://example.com/media/"
MEDIA_URL = '/media/'

# Absolute path to the directory static files should be collected to.
# Don't put anything in this directory yourself; store your static files
# in apps' "static/" subdirectories and in STATICFILES_DIRS.
# Example: "/home/media/media.lawrence.com/static/"
STATIC_ROOT = '/srv/www/cb/static'

# URL prefix for static files.
# Example: "http://media.lawrence.com/static/"
STATIC_URL = '/static/'

# Additional locations of static files
STATICFILES_DIRS = (
    # Put strings here, like "/home/html/static" or "C:/www/django/static".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
)

# List of finder classes that know how to find static files in
# various locations.
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
#    'django.contrib.staticfiles.finders.DefaultStorageFinder',
)

# Make this unique, and don't share it with anybody.
SECRET_KEY = '8lu*6g0lg)9z!ba+a$ehk)xt)x%rxgb$i1&022shmi1jcgihb*'

# List of callables that know how to import templates from various sources.
TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader',
#     'django.template.loaders.eggs.Loader',
)

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.contrib.auth.context_processors.auth',
    'django.core.context_processors.request',
    'django.core.context_processors.debug',
    'django.core.context_processors.i18n',
    'django.core.context_processors.media',
    'django.core.context_processors.static',
    'django.core.context_processors.tz',
    'django.contrib.messages.context_processors.messages',
    'web.context.inbox',
    'web.context.base',
    'web.context.main_search',
    'web.context.enums',
)

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'watson.middleware.SearchContextMiddleware',
    'debug_toolbar.middleware.DebugToolbarMiddleware',
    'middleware.UserMemberMiddleware',
    'middleware.ProfilerMiddleware',
    'middleware.VaryOnAcceptMiddleware',
    # Uncomment the next line for simple clickjacking protection:
    # 'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

ROOT_URLCONF = 'cb.urls'

# Python dotted path to the WSGI application used by Django's runserver.
WSGI_APPLICATION = 'cb.wsgi.application'

TEMPLATE_DIRS = (
    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
    '/srv/www/cb/web/templates',
    '/srv/www/cb/templates',
)

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'south',
    'grappelli', # must be before admin
    'django.contrib.admin',
    'django.contrib.admindocs',
    'endless_pagination',
    'debug_toolbar',
    'djangoratings',
    'watson',
    'web',
)

AUTH_USER_MODEL = 'web.User'

# A sample logging configuration. The only tangible logging
# performed by this configuration is to send an email to
# the site admins on every HTTP 500 error when DEBUG=False.
# See http://docs.djangoproject.com/en/dev/topics/logging for
# more details on how to customize your logging configuration.
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'filters': {
        'require_debug_false': {
            '()': 'django.utils.log.RequireDebugFalse'
        }
    },
    'formatters': {
        'standard': {
            'format' : "[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s",
            'datefmt' : "%d/%b/%Y %H:%M:%S"
        },
    },
    'handlers': {
        'mail_admins': {
            'level': 'ERROR',
            'filters': ['require_debug_false'],
            'class': 'django.utils.log.AdminEmailHandler'
        },
        'null': {
            'level':'DEBUG',
            'class':'django.utils.log.NullHandler',
        },
        'logfile': {
            'level':'DEBUG',
            'class':'logging.handlers.RotatingFileHandler',
            'filename': "/srv/www/cb/logs/application.log",
            'maxBytes': 50000,
            'backupCount': 2,
            'formatter': 'standard',
        },
        'console':{
            'level':'INFO',
            'class':'logging.StreamHandler',
            'formatter': 'standard'
        },
    },
    'loggers': {
        'django.request': {
            'handlers': ['mail_admins'],
            'level': 'ERROR',
            'propagate': True,
        },
        'django': {
            'handlers':['console'],
            'propagate': True,
            'level':'WARN',
        },
        'django.db.backends': {
            'handlers': ['console'],
            'level': 'DEBUG',
            'propagate': False,
        },
        'web': {
            'handlers': ['console', 'logfile'],
            'level': 'DEBUG',
        },
    },
}

LOGIN_URL = 'login'
LOGOUT_URL = 'logout'

#ENDLESS_PAGINATION_LOADING = """
#    <img src="/static/web/img/preloader.gif" alt="loading" style="margin:auto"/>
#"""
ENDLESS_PAGINATION_LOADING = """
    <div class="spinner small" style="margin:auto">
        <div class="block_1 spinner_block small"></div>
        <div class="block_2 spinner_block small"></div>
        <div class="block_3 spinner_block small"></div>
    </div>
"""

DEBUG_TOOLBAR_CONFIG = {
    'INTERCEPT_REDIRECTS': False,
}

import django.template.loader
django.template.loader.add_to_builtins('web.templatetags.cb_tags')
django.template.loader.add_to_builtins('web.templatetags.tag_library')

WATSON_POSTGRESQL_SEARCH_CONFIG = 'public.english_nostop'

Một trong các tệp cài đặt:

(cb)clime@den /srv/www/cb/cb/settings $ cat development.py 
from base import *

DEBUG = True
TEMPLATE_DEBUG = True

ALLOWED_HOSTS = ['127.0.0.1', '31.31.78.149']

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'cwu',
        'USER': 'clime',
        'PASSWORD': '',
        'HOST': '',
        'PORT': '',
    }
}

MEDIA_ROOT = '/srv/www/cb/media/'

STATIC_ROOT = '/srv/www/cb/static/'

TEMPLATE_DIRS = (
    '/srv/www/cb/web/templates',
    '/srv/www/cb/templates',
)

Mã trong manage.py:

(cb)clime@den /srv/www/cb $ cat manage.py 
#!/usr/bin/env python
import os
import sys

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "cb.settings.development")

    from django.core.management import execute_from_command_line

    execute_from_command_line(sys.argv)

Nếu tôi thêm from base import *vào /srv/www/cb/cb/settings/__init__.py(còn trống), nó bắt đầu hoạt động một cách kỳ diệu nhưng tôi không hiểu tại sao. Bất cứ ai có thể giải thích cho tôi những gì đang xảy ra ở đây? Nó phải là một số ma thuật mô-đun python.

CHỈNH SỬA: Mọi thứ cũng bắt đầu hoạt động nếu tôi xóa dòng này khỏi base.py

django.template.loader.add_to_builtins('web.templatetags.cb_tags')

Nếu tôi xóa dòng này khỏi web.templatetags.cb_tags, nó cũng bắt đầu hoạt động:

from endless_pagination.templatetags import endless

Tôi đoán là vì, cuối cùng, nó dẫn đến

from django.conf import settings
PER_PAGE = getattr(settings, 'ENDLESS_PAGINATION_PER_PAGE', 10)

Vì vậy, nó tạo ra một số thứ hình tròn kỳ lạ và trò chơi kết thúc.


Chính xác, cuối cùng bạn sẽ luôn luôn cần cài đặt, thậm chí nếu nó là từ django.conf
Guilherme David da Costa

2
Hãy thử thay đổi DJANGO_SETTINGS_MODULE của bạn thành settings.development
Guilherme David da Costa

Bất cứ ai sử dụng virutalenvwrapper câu trả lời thử crimeminister tại stackoverflow.com/questions/10738919/...
lukeaus

Câu trả lời:


106

Tôi đã gặp lỗi tương tự và nó hóa ra là sự phụ thuộc vòng tròn giữa một mô-đun hoặc lớp được tải bởi cài đặt và chính mô-đun cài đặt. Trong trường hợp của tôi, đó là một lớp phần mềm trung gian được đặt tên trong cài đặt mà chính nó đã cố gắng tải cài đặt.


4
Tôi nghĩ rằng sự tuần hoàn làm được điều đó.
clime

5
Refactor để tránh phụ thuộc vòng tròn. Giải pháp chính xác thực sự khá cụ thể cho mã của riêng bạn.
Sam Svenbjorgchristiensensen

6
Gợi ý: để xác định nguyên nhân gây ra sự cố, ví dụ: thêm một câu lệnh in ngẫu nhiên trong tệp cài đặt và di chuyển nó xung quanh để xem nó bị hỏng ở đâu.
Felix Böhme

14
Tôi không tìm thấy câu trả lời cho điều này.
Avinash Raj

8
Câu trả lời này sẽ hữu ích hơn nếu nó cụ thể hơn ... nó nói rằng vấn đề là "cái gì đó".
Hack-R

73

Tôi gặp phải vấn đề tương tự sau khi cơ cấu lại cài đặt theo hướng dẫn từ cuốn sách Hai muỗng Django của Daniel Greenfield .

Tôi đã giải quyết vấn đề bằng cách thiết lập

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project_name.settings.local")

trong manage.pywsgi.py .

Cập nhật:

Trong giải pháp trên, local là tên tệp (settings / local.py) bên trong thư mục cài đặt của tôi, giữ các cài đặt cho môi trường cục bộ của tôi.

Một cách khác để giải quyết vấn đề này là giữ tất cả các cài đặt chung của bạn bên trong settings / base.py và sau đó tạo 3 tệp cài đặt riêng cho môi trường sản xuất, dàn dựng và nhà phát triển của bạn.

Thư mục cài đặt của bạn sẽ giống như sau:

settings/
    __init__.py
    base.py
    local.py
    prod.py
    stage.py

và giữ mã sau trong settings/__init__.py

from .base import *

env_name = os.getenv('ENV_NAME', 'local')

if env_name == 'prod':
    from .prod import *
elif env_name == 'stage':
    from .stage import *
else:
    from .local import *

Đối với bất kỳ ai sử dụng Wagtail trên Python, chỉ cần thêm '.dev.' ở cuối dòng này trong WSGI ... os.enosystem ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings.dev', sau này bạn cần tạo local.py bên ngoài kho lưu trữ nguồn cho mật khẩu của mình, v.v.
Inyoka

Nên câu trả lời đầu
Dev

ImportError: Không có mô-đun có tên địa phương
Tessaracter

@Tessaracter sử dụng tên của tệp cài đặt mà bạn sử dụng thay vì local. Trong trường hợp của tôi, cài đặt cục bộ được giữ trong cài đặt tệp / local.py
Jinesh 22/09/19

1
Điều này vi phạm các quy ước của Django, thay thế biến được ghi chép đúng cách DJANGO_SETTINGS_MODULEbằng một biến môi trường tùy chỉnh mới không được hỗ trợ sẵn và phải được xử lý thủ công. Tôi ngạc nhiên vì điều này có rất nhiều ủng hộ. Tôi đang thực hiện một dự án với thiết lập này và chúng tôi đang gặp rất nhiều vấn đề, từ khó khăn trong việc định cấu hình môi trường biệt lập để phát triển cục bộ cho đến việc các thư viện bên ngoài bị phá vỡ vì họ mong đợi DJANGO_SETTINGS_MODULEhoạt động như mong đợi và nó không.
Ariel

20

Tôi đã có cùng một lỗi với python manage.py runserver.

Đối với tôi, hóa ra đó là do một tệp nhị phân (.pyc) được biên dịch cũ. Sau khi xóa tất cả các tệp như vậy trong dự án của tôi, máy chủ bắt đầu chạy lại. :)

Vì vậy, nếu bạn gặp lỗi này, tức là không thực hiện bất kỳ thay đổi nào dường như liên quan đến cài đặt django, thì đây có thể là một biện pháp tốt đầu tiên.


2
cảm ơn cho mẹo này. Tôi đã gặp sự cố tương tự trên máy chủ nhà phát triển của mình. Xóa tất cả các tệp .pyc khỏi thư mục dự án đã thực hiện thủ thuật. Tôi đã chỉnh sửa tệp settings.py ngay trước khi điều này xảy ra.
croc

15

Xóa tệp .pyc

Lệnh đầu cuối Ubuntu để xóa .pyc: find . -name "*.pyc" -exec rm -rf {} \;

Tôi đã gặp lỗi tương tự khi tôi thực hiện python management.py runningerver. Đó là vì tệp .pyc. Tôi đã xóa tệp .pyc khỏi thư mục dự án khi đó nó đang hoạt động.


2
find . -type f -name *.pyc -deletesẽ làm
Srinivas Reddy Thatiparthy

7

Tôi chưa chỉ định tệp cài đặt:

python manage.py runserver --settings=my_project.settings.develop

6

Nó bắt đầu hoạt động vì trên base.py bạn có tất cả thông tin cần thiết trong một tệp cài đặt cơ bản. Bạn cần dòng:

SECRET_KEY = '8lu*6g0lg)9z!ba+a$ehk)xt)x%rxgb$i1&amp;022shmi1jcgihb*'

Vì vậy, nó hoạt động và khi bạn làm vậy from base import *, nó sẽ nhập SECRET_KEY vào của bạn development.py.

Bạn phải luôn nhập các cài đặt cơ bản trước khi thực hiện bất kỳ cài đặt tùy chỉnh nào.


CHỈNH SỬA: Ngoài ra, khi django nhập phát triển từ gói của bạn, nó sẽ khởi tạo tất cả các biến bên trong cơ sở kể từ khi bạn xác định from base import *bên trong__init__.py


xin lỗi, tôi không hiểu ý bạn. Đã có từ nhập cơ sở * vào đầu development.py và nó không hoạt động.
clime

Xin lỗi, tôi đã nhảy vào bất kể điều gì đang thực sự xảy ra. Django vẫn đang cố gắng nhập cài đặt từ cài đặt thay vì phát triển của bạn.py vì có vẻ như lý do hoạt động khi bạn nhập cơ sở tại init .py
Guilherme David da Costa

5

Tôi nghĩ rằng đó là lỗi Môi trường , bạn nên thử cài đặt:DJANGO_SETTINGS_MODULE='correctly_settings'


4

Tôi đã có cùng một vấn đề với Celery. Setting.py của tôi trước đây :

SECRET_KEY = os.environ.get('DJANGO_SECRET_KEY')

sau:

SECRET_KEY = os.environ.get('DJANGO_SECRET_KEY', <YOUR developing key>)

Nếu các biến môi trường không được xác định thì: SECRET_KEY = Khóa phát triển của BẠN


4

Trong init .py của thư mục cài đặt, hãy viết nhập đúng, như:

from Project.settings.base import *

Không cần thay đổi wsgi.py hoặc management.py


Hoàn hảo! Cảm ơn.
Mayur

2

Tôi đã giải quyết sự cố này xảy ra trên OS X với Django cả 1.5 và 1.6 bằng cách hủy kích hoạt tất cả các phiên hoạt động thành virtualenv và khởi động lại.


2

Đối với bất kỳ ai sử dụng PyCharm: nút "Chạy cấu hình đã chọn" màu xanh lá cây sẽ tạo ra lỗi này, nhưng việc chạy sau hoạt động:

py manage.py runserver 127.0.0.1:8000 --settings=app_name.settings.development

Để khắc phục điều này, bạn cần chỉnh sửa các biến môi trường của cấu hình. Để thực hiện việc này, hãy nhấp vào trình đơn thả xuống "Chọn cấu hình chạy / gỡ lỗi" ở bên trái của nút chạy màu xanh lục và sau đó nhấp vào "chỉnh sửa cấu hình". Trong tab "môi trường", hãy thay đổi biến môi trường DJANGO_SETTINGS_MODULEthành app_name.settings.development.


1

Tôi chỉ muốn nói thêm rằng tôi đã gặp lỗi này khi tên cơ sở dữ liệu của tôi bị sai chính tả trong settings.pytệp của tôi nên không thể tạo DB.


1

Tôi đã giải quyết sự cố này vào ngày 1.8.4 bằng cách sửa cài đặt TEMPLATES có lỗi đánh máy (xóa TEMPLATES ['debug'] đã giải quyết được nó)

Xem lại các cài đặt mà bạn đã thay đổi gần đây, đảm bảo tất cả các khóa đều là của sổ.


1

Để đưa một giải pháp tiềm năng khác vào hỗn hợp, tôi đã có một settingsthư mục cũng như mộtsettings.py thư mục trong dir dự án của mình. (Tôi đã chuyển trở lại từ các tệp cài đặt dựa trên môi trường thành một tệp. Kể từ đó, tôi đã xem xét lại.)

Python đang bối rối về việc tôi muốn nhập project/settings.pyhay project/settings/__init__.py. Tôi đã gỡ bỏ settingsdir và mọi thứ giờ hoạt động tốt.


0

Tôi đã giải quyết vấn đề này bằng cách xóa khoảng trắng xung quanh dấu bằng ( =) trong .envtệp của mình .


0

Trong trường hợp của tôi, vấn đề là - tôi có của tôi app_foldersettings.pytrong đó. Sau đó, tôi quyết định vào Settings folderbên trong app_folder- và điều đó đã gây ra va chạm với settings.py. Chỉ cần đổi tên nó Settings folder- và mọi thứ đã hoạt động.


0

Hệ điều hành Mac của tôi không thích rằng nó không tìm thấy biến env được đặt trong tệp cài đặt:

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = os.environ.get('MY_SERVER_ENV_VAR_NAME')

nhưng sau khi thêm env var vào môi trường nhà phát triển Mac OS cục bộ của tôi, lỗi đã biến mất:

export MY_SERVER_ENV_VAR_NAME ='fake dev security key that is longer than 50 characters.'

Trong trường hợp của tôi, tôi cũng cần thêm --settingstham số:

python3 manage.py check --deploy --settings myappname.settings.production

trong đó production.py là một tệp chứa các cài đặt sản xuất cụ thể bên trong thư mục cài đặt.


0

Vấn đề đối với tôi là gọi get_text_noopbằng LANGUAGES có thể lặp lại.

Thay đổi

LANGUAGES = (
    ('en-gb', get_text_noop('British English')),
    ('fr', get_text_noop('French')),
)

đến

from django.utils.translation import gettext_lazy as _

LANGUAGES = (
    ('en-gb', _('British English')),
    ('fr', _('French')),
)

trong tệp cài đặt cơ sở đã giải quyết ImproperlyConfigured: The SECRET_KEY setting must not be emptyngoại lệ.


0

Tôi đã giải quyết vấn đề trên bằng cách nhận xét dòng trong settings.py

SECRET_KEY=os.environ.get('SECRET_KEY')

SECRET_KEYđược khai báo trong ~/.bashrctệp của tôi (dành cho người dùng Linux Ubuntu)

Đối với mục đích phát triển trên máy cục bộ của tôi, tôi đã không sử dụng biến môi trường

SECRET_KEY = '(i9b4aes#h1)m3h_8jh^duxrdh$4pu8-q5vkba2yf$ptd1lev_'

dòng trên không đưa ra lỗi


0

Trong trường hợp của tôi, trong khi thiết lập hành động Github, tôi đã quên thêm các biến env vào tệp yml:

jobs:
  build:
    env:
     VAR1: 1
     VAR2: 5

0

Lý do tại sao có rất nhiều câu trả lời khác nhau là bởi vì ngoại lệ có thể không liên quan gì đến SECRET_KEY. Nó có lẽ là một ngoại lệ trước đó đang bị nuốt. Bật gỡ lỗi bằng cách sử dụng DEBUG = True để xem ngoại lệ thực sự.


0

Trong trường hợp của tôi, sau một thời gian dài tìm kiếm, tôi thấy rằng PyCharm trong cài đặt Django của bạn (Cài đặt> Ngôn ngữ & Khung công tác> Django) chưa xác định trường tệp cấu hình. Bạn nên làm cho trường này trỏ đến tệp cài đặt của dự án. Sau đó, bạn phải mở cài đặt Chạy / Gỡ lỗi và xóa biến môi trường DJANGO_SETTINGS_MODULE = đường dẫn hiện có.

Điều này xảy ra do plugin Django trong PyCharm buộc cấu hình của khung. Vì vậy, không có ích gì khi định cấu hình bất kỳ os.environ.setdefault nào ('DJANGO_SETTINGS_MODULE', 'myapp.settings')


0

Nhập base.py vào __init__.py một mình. đảm bảo rằng bạn sẽ không lặp lại cấu hình tương tự nữa !.

đặt biến môi trường SET DJANGO_DEVELOPMENT =dev

settings/
  __init__.py
  base.py
  local.py
  production.py

Trong __init__.py

from .base import *
if os.environ.get('DJANGO_DEVELOPMENT')=='prod':
   from .production import *
else:
   from .local import *

Trong base.pycấu hình các cấu hình chung. ngoại trừ Cơ sở dữ liệu. giống

SECRET_KEY, ALLOWED_HOSTS,INSTALLED_APPS,MIDDLEWARE .. etc....

Trong local.py

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.postgresql_psycopg2',
    'NAME': 'database',
    'USER': 'postgres',
    'PASSWORD': 'password',
    'HOST': 'localhost',
    'PORT': '5432',
}
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.