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() # 假設有個工程mysite,有兩個app爲blog跟bbs # django處理static的方法是把各個app各自的static合併到一處 # 比如: # mysite/mysite/static 放置公共靜態文件 # mysite/bbs/static 放置該app自己的靜態文件 # mysite/blog/static 放置該app自己的靜態文件 # 可以這麼設置: # STATIC_ROOT = '/www/mysite/mysite/static ' # STATIC_URL = '/static/' # STATICFILES_DIRS = ( # 'mysite/static', # 'bbs/static/', # 'blog/static/', # ) # 使用命令 # manage.py collectstatic # 就會自動把所有靜態文件全部複製到STATIC_ROOT中 # 如果開啓了admin,這一步是很必要的,不然部署到生產環境的時候會找不到樣式文件 # 不要把你項目的靜態文件放到這個目錄。這個目錄只有在運行python manage.py collectstatic時纔會用到
django settings最佳配置
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.