一、Django setting配置说明
二、setting配置一览
一、Django setting配置说明
1.基础
DJANGO_SETTING_MODULE环境变量:让settings模块被包含到python可以找到的目录下,开发情况下不需要,我们通常会在当前文件夹运行,python可以搜索到。如果需要运行在其他服务器上,就必须指定DJANGO_SETTINGS_MODULE变量。
2.默认设定
一个django的settings文件不需要我们手动去设置所有项目,因为系统已经默认设置好了。我们只需要修改我们使用的设定就好了。默认的设置在django/conf/global_settings.py文件中。django在编译时,先载入global_settings.py中的配置,然后加载指定的settings文件,重写改变的设定。
二、setting配置一览
1.app路径
INSTALLED_APPS = [ ‘django.contrib.admin‘, ‘django.contrib.auth‘, ‘django.contrib.contenttypes‘, ‘django.contrib.sessions‘, ‘django.contrib.messages‘, ‘django.contrib.staticfiles‘, ‘app1.apps.App1Config‘, # 默认已有 如果没有只要添加app名称即可 例如: ‘app1‘ # 新建的应用都要在这里添加 ]
2.数据库配置
如果django的默认sqllite3数据库则不需要改
DATABASES = { ‘default‘: { ‘ENGINE‘: ‘django.db.backends.sqlite3‘, ‘NAME‘: os.path.join(BASE_DIR, ‘db.sqlite3‘), } }
如果使用mysql数据库需要将上述数据库注掉修改如下:
DATABASES = { ‘default‘: { ‘ENGINE‘: ‘django.db.backends.mysql‘, ‘NAME‘: ‘blog‘, #你的数据库名称 数据库需要自己提前建好 ‘USER‘: ‘root‘, #你的数据库用户名 ‘PASSWORD‘: ‘‘, #你的数据库密码 ‘HOST‘: ‘‘, #你的数据库主机,留空默认为localhost ‘PORT‘: ‘3306‘, #你的数据库端口 } }}
并且需要在用的__init__.py文件添加
import pymysql pymysql.install_as_MySQLdb()
3.sql语句
LOGGING = { ‘version‘: 1, ‘disable_existing_loggers‘: False, ‘handlers‘: { ‘console‘:{ ‘level‘:‘DEBUG‘, ‘class‘:‘logging.StreamHandler‘, }, }, ‘loggers‘: { ‘django.db.backends‘: { ‘handlers‘: [‘console‘], ‘propagate‘: True, ‘level‘:‘DEBUG‘, }, } }
当你的操作与数据库相关时,会将我们写的语句翻译成sql语句在服务端打印
4.静态文件目录
STATIC_URL = ‘/static/‘ #调用时目录 STATICFILES_DIRS=[ os.path.join(BASE_DIR,"static"), #具体路径 ]
5.如果数据库中的User(用户表)继承django内置AbstartUser
#model需要导入
from django.contrib.auth.models import AbstractUser
#配置文件
AUTH_USER_MODEL = "应用名.UserInfo"
6.中间件
自己写的中间件,例如在项目中的md文件夹下,PY文件中的M1与M2两个中间件
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‘, ‘md.md.M1‘, ‘md.md.M2‘, ]
注意:自己的中间件,配置要写在系统中的后面
7.setting存储的相关配置
#数据库配置(默认)
Django默认支持Session,并且默认是将Session数据存储在数据库中,即:django_session 表中。 配置 settings.py SESSION_ENGINE = ‘django.contrib.sessions.backends.db‘ # 引擎(默认) SESSION_COOKIE_NAME = "sessionid" # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认) SESSION_COOKIE_PATH = "/" # Session的cookie保存的路径(默认) SESSION_COOKIE_DOMAIN = None # Session的cookie保存的域名(默认) SESSION_COOKIE_SECURE = False # 是否Https传输cookie(默认) SESSION_COOKIE_HTTPONLY = True # 是否Session的cookie只支持http传输(默认) SESSION_COOKIE_AGE = 1209600 # Session的cookie失效日期(2周)(默认) SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否关闭浏览器使得Session过期(默认) SESSION_SAVE_EVERY_REQUEST = False # 是否每次请求都保存Session,默认修改之后才保存(默认)
#缓存配置
配置 settings.py SESSION_ENGINE = ‘django.contrib.sessions.backends.cache‘ # 引擎 SESSION_CACHE_ALIAS = ‘default‘ # 使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置 SESSION_COOKIE_NAME = "sessionid" # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串 SESSION_COOKIE_PATH = "/" # Session的cookie保存的路径 SESSION_COOKIE_DOMAIN = None # Session的cookie保存的域名 SESSION_COOKIE_SECURE = False # 是否Https传输cookie SESSION_COOKIE_HTTPONLY = True # 是否Session的cookie只支持http传输 SESSION_COOKIE_AGE = 1209600 # Session的cookie失效日期(2周) SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否关闭浏览器使得Session过期 SESSION_SAVE_EVERY_REQUEST = False # 是否每次请求都保存Session,默认修改之后才保存
#默认配置
配置 settings.py SESSION_ENGINE = ‘django.contrib.sessions.backends.file‘ # 引擎 SESSION_FILE_PATH = None # 缓存文件路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir() SESSION_COOKIE_NAME = "sessionid" # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串 SESSION_COOKIE_PATH = "/" # Session的cookie保存的路径 SESSION_COOKIE_DOMAIN = None # Session的cookie保存的域名 SESSION_COOKIE_SECURE = False # 是否Https传输cookie SESSION_COOKIE_HTTPONLY = True # 是否Session的cookie只支持http传输 SESSION_COOKIE_AGE = 1209600 # Session的cookie失效日期(2周) SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否关闭浏览器使得Session过期 SESSION_SAVE_EVERY_REQUEST = False # 是否每次请求都保存Session,默认修改之后才保存
注意:
1.也可以自定义配置,当时自定义配置都要写在配置文件的最下方,代码中使用时可以导入
from django.conf import settings settings.配置名
2.上面所有的配置都是针对特定问题需要修改的,系统默认配置不做说明
# 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时才会用到
django settings最佳配置
原文地址:https://www.cnblogs.com/wuzhengzheng/p/10453014.html