django settings最佳配置

# encoding=utf-8

import os
import socket

SITE_ID = 1

# 項目的根目錄
# 簡化後面的操做
PROJECT_ROOT = os.path.dirname(os.path.dirname(__file__))

# 加載應用
# 把應用添加到INSTALLED_APPS中
from apps.kuser.mysetting import myapp as kuser_app
from apps.blog.mysetting import myapp as blog_app
MY_APPS = blog_app + kuser_app

# 加載靜態文件
from apps.blog.mysetting import my_staticfiles as blog_staticfiles
from apps.kuser.mysetting import my_staticfiles as kuser_staticfiles
MY_STATIC_DIRS = blog_staticfiles + kuser_staticfiles

# 加載模板文件
from apps.blog.mysetting import my_templates as blog_templates
from apps.kuser.mysetting import my_templates as kuser_templates
MY_TEMPLATE_DIRS = blog_templates + kuser_templates

# 密鑰配置
# 適用於開發環境和部署環境
# 能夠從系統環境中,配置文件中,和硬編碼的配置中獲得密鑰
try:
    SECRET_KEY = os.environ['SECRET_KEY']
except:
    try:
        with open(os.path.join(PROJECT_ROOT, 'db/secret_key').replace('\\', '/')) as f:
            SECRET_KEY = f.read().strip()
    except:
        SECRET_KEY = '*lk^6@0l0(iulgar$j)faff&^(^u+qk3j73d18@&+ur^xuTxY'

# 獲得主機名
def hostname():
    sys = os.name
    if sys == 'nt':
        hostname = os.getenv('computername')
        return hostname

    elif sys == 'posix':
        host = os.popen('echo $HOSTNAME')
        try:
            hostname = host.read()
            return hostname
        finally:
            host.close()
    else:
        raise RuntimeError('Unkwon hostname')

#調試和模板調試配置
#主機名相同則爲開發環境,不一樣則爲部署環境
#ALLOWED_HOSTS只在調試環境中才能爲空
if socket.gethostname().lower() == hostname().lower():
    DEBUG = TEMPLATE_DEBUG = True
    ALLOWED_HOSTS = []
else:
    ALLOWED_HOSTS = [
        'baidu.com',
        '0.0.0.0',
    ]
    DEBUG = TEMPLATE_DEBUG = False


#數據庫配置
MYDB = {
    'mysql': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'books',  #你的數據庫名稱
        'USER': 'root',  #你的數據庫用戶名
        'PASSWORD': '',  #你的數據庫密碼
        'HOST': '',  #你的數據庫主機,留空默認爲localhost
        'PORT': '3306',  #你的數據庫端口
    },
    'sqlite': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(PROJECT_ROOT, 'db/db.sqlite3').replace('\\', '/'),
    }
}

# 給靜態文件url一個後綴,在templates裏用到的。
# 映射到靜態文件的url
#  STATIC_URL的含義與MEDIA_URL相似
STATIC_URL = '/static/'

# 總的static目錄
# 可使用命令 manage.py collectstatic 自動收集static文件
# STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static').replace('\\', '/')

#放各個app的static目錄及公共的static目錄
#STATICFILES_DIRS:和TEMPLATE_DIRS的含義差很少,就是除了各個app的static目錄之外還須要管理的靜態文件設置,
#好比項目的公共文件差很少。而後給靜態文件變量賦值,告訴Django,靜態文件在哪裏
#另外,Django提供了一個findstatic命令來查找指定的靜態文件所在的目錄,例如:D:\TestDjango>python manage.py findstatic Chrome.jpg
# 默認狀況下(若是沒有修改STATICFILES_FINDERS的話),Django首先會在STATICFILES_DIRS配置的文件夾中尋找靜態文件,而後再從每一個app的static子目錄下查找,
# 而且返回找到的第一個文件。因此咱們能夠將全局的靜態文件放在STATICFILES_DIRS配置的目錄中,將app獨有的靜態文件放在app的static子目錄中。
# 存放的時候按類別存放在static目錄的子目錄下,如圖片都放在images文件夾中,全部的CSS都放在css文件夾中,全部的js文件都放在js文件夾中。
STATICFILES_DIRS = (
    ("downloads", os.path.join(PROJECT_ROOT, 'static/downloads').replace('\\', '/')),
    ("uploads", os.path.join(PROJECT_ROOT, 'static/uploads').replace('\\', '/')),
)
# 將app中的靜態文件添加到靜態文件配置列表中
STATICFILES_DIRS += MY_STATIC_DIRS


# 最後關鍵的部分是STATICFILES_DIRS如下配置
# 簡要說一下,static文件夾在項目裏,有css js images 三個文件夾(看項目結構),他們的路徑分別是:
# os.path.join(STATIC_ROOT,'css'),os.path.join(STATIC_ROOT,'js'),os.path.join(STATIC_ROOT,'images');
# 咱們分別給他們起三個別名css,js,images(你能夠隨意給,不過爲了易記,咱們原名稱指定別名了)
TEMPLATE_DIRS = (
    os.path.join(PROJECT_ROOT, 'templates').replace('\\', '/'),
)
# 配置應用的模板文件路徑
TEMPLATE_DIRS += MY_TEMPLATE_DIRS

# 配置緩存
 CACHES = {
     'default': {
         'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
         'LOCATION': 'unix:/tmp/memcached.sock',
         'KEY_PREFIX': 'lcfcn',
         'TIMEOUT': None
     }
 }

LOGIN_REDIRECT_URL = '/'
LOGIN_URL = '/auth/login/'
LOGOUT_URL = '/auth/logout/'


# 指用戶上傳的文件,好比在Model裏面的FileFIeld,ImageField上傳的文件。若是你定義
# MEDIA_ROOT=c:\temp\media,那麼File=models.FileField(upload_to="abc/"),上傳的文件就會被保存到c:\temp\media\abc。MEDIA_ROOT必須是本地路徑的絕對路徑。
MEDIA_ROOT = os.path.join(PROJECT_ROOT, 'static/uploads')

# MEDIA_URL是指從瀏覽器訪問時的地址前綴。
MEDIA_URL = '/uploads/'




# 應用註冊列表
INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.sites',
    'django.contrib.sitemaps',
)

#爲了避免和系統應用混合,本身開發的應用放在這裏
# 將本身寫的app添加到應用列表中去
INSTALLED_APPS += MY_APPS



# django 中間件
# django處理一個Request的過程是首先經過django 中間件,而後再經過默認的URL方式進行的。
# 因此說咱們要作的就是在django 中間件這個地方把全部Request攔截住,
# 用咱們本身的方式完成處理之後直接返回Response,那麼咱們能夠簡化原來的設計思路,
# 把中間件不能處理的 Request通通無論,丟給Django去處理。
MIDDLEWARE_CLASSES = (
    'django.middleware.cache.UpdateCacheMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    # 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django.middleware.cache.FetchFromCacheMiddleware',
)

ROOT_URLCONF = 'lcforum.urls'

WSGI_APPLICATION = 'lcforum.wsgi.application'

#數據庫配置
DATABASES = {
    'default': MYDB.get('sqlite'),
}

# 語言
LANGUAGE_CODE = 'zh-cn'

# 時區
TIME_ZONE = 'Asia/Shanghai'

USE_TZ = True




# 在template中使用靜態文件
# 採用這種方式須要有一些額外配置,打開settings.py,確認TEMPLATE_CONTEXT_PROCESSORS中包含有'django.core.context_processors.static'
# TEMPLATE_CONTEXT_PROCESSORS = (
#     'django.core.context_processors.debug',
#     'django.core.context_processors.i18n',
#     'django.core.context_processors.media',
#     'django.core.context_processors.static',
#     'django.contrib.auth.context_processors.auth',
#     'django.contrib.messages.context_processors.messages',
#
#     'django.core.context_processors.tz',
#     'django.contrib.messages.context_processors.messages',
#    # 'blog.context_processors.custom_proc',自定義函數
# )
#from django.conf import settings
#gettext = lambda s: s
#getattr()

# 假設有個工程djangodemo,有兩個app爲demo1跟demo2
# django處理static的方法是把各個app各自的static合併到一處
# 好比:
# djangodemo/djangodemo/static 放置公共靜態文件
# djangodemo/demo1/static 放置該app本身的靜態文件
# djangodemo/demo2/static 放置該app本身的靜態文件
# 能夠這麼設置:
# STATIC_ROOT = '/www/djangodemo/djangodemo/static '
# STATIC_URL = '/static/'
# STATICFILES_DIRS = (
#     'djangodemo/static',
#     'demo1/static/',
#     'demo2/static/',
# )
# 使用命令
# manage.py collectstatic
# 就會自動把全部靜態文件所有複製到STATIC_ROOT中
# 若是開啓了admin,這一步是很必要的,否則部署到生產環境的時候會找不到樣式文件
# 不要把你項目的靜態文件放到這個目錄。這個目錄只有在運行manage.py collectstatic時纔會用到
相關文章
相關標籤/搜索