Django settings.py 所有配置项设置大全
Django 的配置文件包含 Django 应用的所有配置项
ADMINS
所有收到代码错误通知的人的列表。当DEBUG=False和 AdminEmailHandler 中设置了 LOGGING 时,Django会将请求/响应周期中出现的异常的详细信息通过邮件发送给这些人。
列表中的每个项目应该是一个元组 (全名, 电子邮件地址)。例如:
ADMINS=[('John', 'john@example.com'), ('Mary', 'mary@example.com')]#默认为[] (空列表)
BASE_DIR
Django项目文件夹所在目录得绝对路径
BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))。
DEBUG
显示bug信息
DEBUG=True #默认值是True。
当你在部署项目在生产环境时,请切记设置DEBUG=False。当你设置DEBUG=False, 一定要设置ALLOWED_HOSTS选项, 否则会抛出异常;当你设置DEBUG=False,静态文件将无法访问,因为django的wsgiref无法处理静态文件
ALLOWED_HOSTS
配置允许哪些ip访问的
ALLOWED_HOSTS=[] #默认值为空* 代表允许所有的
设置ALLOWED_HOSTS是为了限定用户请求中的host值,以防止黑客构造包来进行头部攻击。该选项正确设置方式如下:
DEBUG=True: ALLOWED_HOSTS可以为空
DEBUG=False: ALLOWED_HOSTS=['12.34.56.xx', 'www.example.com','127.0.0.1']
正式部署项目时尽量不要设置ALLOWED_HOSTS=['*']。
APPEND_SLASH
自动在地址后添加'/'
APPEND_SLASH=True #默认为true
当设置为 True 时,如果请求的 URL 不符合 URLconf 中的任何模式,并且不以斜线结尾,则会发出一个 HTTP 重定向到相同的URL,并附加一个斜线。注意,重定向可能会导致 POST 请求中提交的任何数据丢失。APPEND_SLASH 的配置只有在安装了 CommonMiddleware 的情况下才会使用。
PREPEND_WWW
PREPEND_WWW=False #默认为False
是否给没有“www.”子域的 URL 加前缀。只有在安装了 CommonMiddleware 的情况下才会使用
SECRET_KEY
SECRET_KEY是Django根据自己算法生成的一大串随机数,本质是个加密盐,用于防止CSRF(Cross-site request forgery)跨站请求伪造攻击。
# 方法一: 从环境变量中读取SECRET_KEY
import os
SECRET_KEY = os.environ['SECRET_KEY']
# 方法二: 从服务器上Django项目文件价外的某个文件读取
with open('/etc/secret_key.txt') as f:
SECRET_KEY = f.read().strip()
INSTALLED_APPS
添加应用
INSTALLED_APPS =
[
'django.contrib.admin', // 管理后台应用
'django.contrib.auth', // 用户身份认证
'django.contrib.contenttypes', // 追踪ORM模型与应用的对应关系
'django.contrib.sessions', // session应用
'django.contrib.messages', // 消息应用
'django.contrib.staticfiles', // 管理站点静态文件
'app1.apps.App1Config', # 默认已有 如果没有只要添加app名称即可 例如:'app1'
# 新建的应用都要在这里添加
]
认证
AUTH_USER_MODEL
注册自定义用户模型
# ,格式:“app应用名.表名称”
# 告诉django,不要在生成user表,用用户自定义的表
AUTH_USER_MODEL = 'users.User'
AUTHENTICATION_BACKENDS
认证类后端类列表
AUTHENTICATION_BACKENDS=['django.contrib.auth.backends.ModelBackend']
LOGIN_REDIRECT_URL
登录后重定向
LOGIN_REDIRECT_URL='/accounts/profile/'
当 LoginView 没有得到 next GET参数时,登录后请求被重定向
LOGIN_URL
重定向登录的地址
LOGIN_URL='/accounts/login/'#默认
当使用login_required()装饰器、LoginRequiredMixin或AccessMixin时,重定向请求登录的 URL
LOGOUT_REDIRECT_URL
登出重定向
LOGOUT_REDIRECT_URL=None #默认,将不执行重定向,并显示注销视图。
PASSWORD_HASHERS
密码存储方式
PASSWORD_HASHERS=[
'django.contrib.auth.hashers.PBKDF2PasswordHasher',
'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher',
'django.contrib.auth.hashers.Argon2PasswordHasher',
'django.contrib.auth.hashers.BCryptSHA256PasswordHasher',
]
AUTH_PASSWORD_VALIDATORS
用于检查用户密码强度的验证器列表。
AUTH_PASSWORD_VALIDATORS=[] #默认为空列表
如果需要添加请参考文章https://docs.djangoproject.com/zh-hans/4.1/topics/auth/passwords/#password-validation
MIDDLEWARE(中间件列表)
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',
]
TEMPLATES
模板
TEMPLATES = [
{ # 基础模板
'BACKEND': 'django.template.backends.django.DjangoTemplates',
# 全局模板,查找顺序 全局--->每一个app(static的查找顺序也是)
'DIRS': [BASE_DIR, 'templates'],
'APP_DIRS': True,
# 选项
'OPTIONS': {
# 上下文处理器,作用:全局都可以拿到这个变量,例如在模板里面拿到request,user
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
ROOT_URLCONF
指定项目的根URL patterns配置文件
数据库配置项
DATABASES是一个字典,包含不同名称的数据库及其具体配置,必须始终有一个名称为default的数据库,默认使用SQLite数据库
官方提供了针对不同数据库的的不同操作引擎,以下是经常用的几个:
- sqlite数据库:'django.db.backends.sqlite3',
- postgreSQL数据库:'django.db.backends.postgresql_psycopg2',
- mysql数据库:'django.db.backends.mysql'
- oracle数据库:'django.db.backends.oracle'
mysql数据库连接
由于mysql默认引擎为MySQLdb,而mysqldb在python3支持不是很好,一般使用pymysql代替。在__init__.py文件中添加下面代码,__init__.py和setting.py 同一目录
__init__.py
import pymysql
pymysql.install_as_MySQLdb()
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'blog', #你的数据库名称 数据库需要自己提前建好
'USER': 'root', #你的数据库用户名
'PASSWORD': '', #你的数据库密码
'HOST': '', #你的数据库主机,留空默认为localhost
'PORT': '3306', #你的数据库端口
}
}
静态文件
STATIC_ROOT
当你运行"python manage.py collectstatic"命令的时候,Django会将各app下所有名为static的文件夹及其子目录复制收集到STATIC_ROOT。
STATIC_URL
STATIC_URL是静态文件URL,设置后可以通过使用{%static 'img/xxx.jpg' %}方式直接访问/static/文件夹里的静态文件。
STATICFILES_DIRS
1. 绝对路径(static/image/1.png),必须开放static路径
2. 一般情况下我们会尽量把静态文件只放在static文件夹或它的子目录下,所以上述两个设置对于一般项目是够的。那么问题来了,如果你还有一些文件夹中也有静态文件,可是文件夹并不是以static命名也不在static子目录里,此时你也希望搜集使用那些静态文件,你该怎么办呢?这时我们就要设置静态文件目录STATICFILES_DIRS值了。
3. 默认值为空。当你设置该选项后,"python manage.py collectstatic"命令会把static文件夹及静态文件目录STATICFILES_DIRS里的静态文件都复制到一份到STATIC_ROOT。比如下例中Django会将下面两个文件夹内容也复制到STATIC_ROOT。注意里面的路径必需是绝对路径哦。
方式一:
STATICFILES_DIRS = [
os.path.join(BASE_DIR,"static")
]
方式二
STATICFILES_DIRS = [
"/home/user/pictures",
"/opt/webfiles/myfiles",
]
STATICFILES_STORAGE
使用 collectstatic 管理命令收集静态文件时要使用的文件存储引擎。
STATICFILES_STORAGE='django.contrib.staticfiles.storage.StaticFilesStorage'
STATIC_URL
引用位于 STATIC_ROOT 中的静态文件时要使用的 URL。
Example: "static/" or "http://static.example.com/"
STATIC_URL='/' #默认
STATICFILES_FINDERS
知道如何找到不同位置的静态文件的查找器后端列表。
STATICFILES_FINDERS=[
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
]
文件上传
MEDIA_ROOT和MEDIA_URL
media文件价一般用于放置用户上传的文件。对于此文件夹的权限设置异常重要,因为用户可能会上传可执行的文件,影响网站和服务器的安全。
# 项目中存储上传文件的根目录[暂时配置],注意,uploads目录需要手动创建否则上传文件时报错
MEDIA_ROOT = os.path.join(BASE_DIR, "uploads")
# 访问上传文件的url地址前缀(默认找到MEDIA_ROOT,跟static一样)
MEDIA_URL = "/media/"
FILE_UPLOAD_TEMP_DIR
FILE_UPLOAD_TEMP_DIR=None
上传文件时要临时存储数据的目录(一般是大于 FILE_UPLOAD_MAX_MEMORY_SIZE 的文件)。如果 None,Django 将使用操作系统的标准临时目录。例如,在 *nix 风格的操作系统上,会默认为 /tmp。
FILE_UPLOAD_MAX_MEMORY_SIZE
上传的文件在被传送到文件系统之前的最大尺寸(以字节为单位)
FILE_UPLOAD_MAX_MEMORY_SIZE='2621440' #默认:2621440 (即 2.5 MB)。
国际化(语言与时间)
USE_I18N
默认为True,是否应该启用 Django 的翻译系统。如果设置为False不翻译机。
USE_L10N
默认为True,默认启用数据的本地化格式。
TIME_ZONE
默认:'America/Chicago',表示本次安装的时区的字符串。
LANGUAGE_CODE = 'zh-Hans' # 设置语言,'en-us':英文,'zh-Hans':中文
TIME_ZONE = 'Asia/Shanghai' # 设置时区,'UTC':标准时区 格林威治时间,'Asia/Shanghai':亚洲上海时区
USE_I18N = True
USE_L10N = True
USE_TZ = False # 设置是否使用标准时区时间,我们设置为False 不适用标准时区
邮箱配置
EMAIL_HOST = 'smtp.qq.com' # 发送者邮箱服务器
EMAIL_PORT = 25 # 端口
EMAIL_HOST_USER = '' # 发送者用户名(邮箱地址)
EMAIL_HOST_PASSWORD = '' # 发送者密码
EMAIL_USE_SSL = True
DEFAULT_FROM_EMAIL = 'xxx@qq.com'
COOKIE与SESSION设置
Django默认支持Session,并且默认是将Session数据存储在数据库中,即:django_session 表中。
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,默认修改之后才保存(默认)
DATE_FORMAT
默认:'Nj,Y' (例如 Feb.4,2003)
在系统的任何部分显示日期字段时使用的默认格式。例子
USE_L10N = False
DATETIME_FORMAT = 'Y-m-d H:i:s'
请注意,如果 USE_L10N 被设置为 True,那么本地决定的格式具有更高的优先权,并将被应用。
DATE_INPUT_FORMATS
在日期字段上输入数据时接受的格式列表。
DATE_INPUT_FORMATS#默认:
[
'%Y-%m-%d', # '2006-10-25'
'%m/%d/%Y', # '10/25/2006'
'%m/%d/%y', # '10/25/06'
'%b %d %Y', # 'Oct 25 2006'
'%b %d, %Y', # 'Oct 25, 2006'
'%d %b %Y', # '25 Oct 2006'
'%d %b, %Y', # '25 Oct, 2006'
'%B %d %Y', # 'October 25 2006'
'%B %d, %Y', # 'October 25, 2006'
'%d %B %Y', # '25 October 2006'
'%d %B, %Y', # '25 October, 2006'
]
格式将按顺序被尝试,使用第一个有效的格式。当 USE_L10N为True 时,将采用本地规定的格式具有更高的优先权。
DATETIME_FORMAT
默认:'Nj,Y,P' (例如 Feb.4,2003,4p.m.)
在系统的任何部分显示日期时间字段时使用的默认格式。如果 USE_L10N被设置为 True,那么本地决定的格式具有更高的优先权并将被应用。例子:
USE_L10N = False
DATE_FORMAT = 'Y-m-d'
DATETIME_INPUT_FORMATS
在日期时间字段上输入数据时可接受的格式列表。格式将按顺序被尝试,使用第一个有效的格式。默认:
[
'%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59'
'%Y-%m-%d %H:%M:%S.%f', # '2006-10-25 14:30:59.000200'
'%Y-%m-%d %H:%M', # '2006-10-25 14:30'
'%m/%d/%Y %H:%M:%S', # '10/25/2006 14:30:59'
'%m/%d/%Y %H:%M:%S.%f', # '10/25/2006 14:30:59.000200'
'%m/%d/%Y %H:%M', # '10/25/2006 14:30'
'%m/%d/%y %H:%M:%S', # '10/25/06 14:30:59'
'%m/%d/%y %H:%M:%S.%f', # '10/25/06 14:30:59.000200'
'%m/%d/%y %H:%M', # '10/25/06 14:30'
]
TIME_FORMAT
默认:'P' (例如 4p.m.)
在系统的任何部分显示时间字段时使用的默认格式。请注意,如果 USE_L10N 被设置为 True,那么本地决定的格式具有更高的优先权,并将被应用。
TIME_INPUT_FORMATS
在时间字段上输入数据时可接受的格式列表。默认:
[
'%H:%M:%S', # '14:30:59'
'%H:%M:%S.%f', # '14:30:59.000200'
'%H:%M', # '14:30'
]
格式将按顺序被尝试,使用第一个有效的格式。当 USE_L10N 为 True 时,将采用本地规定的格式,具有更高的优先权。
YEAR_MONTH_FORMAT
默认:'FY'
在 Django admin change-list 页面中,当只显示年和月的时候,默认的日期字段的格式也可能被系统的其他部分使用。
例如,当 Django 管理员的变更列表页面被日期 drilldown 过滤时,给定月份的头显示月份和年份,不同的地域有不同的格式。请注意,如果 USE_L10N 设置为 True,则相应的本地决定的格式具有更高的优先权,并将被应用。
USE_X_FORWARDED_HOST
默认为False,用于指定是否使用 X-Forwarded-Host头,而不是 Host头。只有在使用设置该头的代理时才应启用。此设置优先于 USE_X_FORWARDED_PORT。
USE_X_FORWARDED_PORT
默认为False,用于指定是否使用X-Forwarded-Port头,而不是 SERVER_PORT``META 变量。只有在使用设置该头的代理时,才应启用。
WSGI_APPLICATION
默认:None
Django 内置服务器(如 runserver)将使用的 WSGI 应用对象的完整 Python 路径。django-admin startproject 管理命令将创建一个标准的 wsgi.py 文件,其中有一个 application 可调用,并将此配置指向该 application。
如果没有设置,将使用 django.core.wsgi.get_wsgi_application() 的返回值。在这种情况下, runserver 的行为将与之前的 Django 版本相同。
SITE_ID
默认为空,当前网站在 django_site 数据库表中的 ID为整数。这样应用数据就可以挂到特定的站点上,一个数据库可以管理多个站点的内容。
DISALLOWED_USER_AGENTS
DISALLOWED_USER_AGENTS =[] #默认空列表
编译后的正则表达式对象列表,系统范围内不允许访问任何页面的User-Agent 字符串,用于限制机器人/爬虫。只有在安装了 CommonMiddleware 的情况下才会使用
SERIALIZATION_MODULES
序列化器定义的模块字典,以该序列化类型的字符串标识符为键。例如,要定义一个 YAML 序列化器,使用:
SERIALIZATION_MODULES = {'yaml': 'path.to.yaml_serializer'}
参考文档