理解 Django 的 settings.py 配置项详解

图片[1]-理解 Django 的 settings.py 配置项详解-山海云端论坛

包含接收代码错误通知的人员列表。当DEBUG=FalseAdminEmailHandler中设置了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值,以防止黑客构造包来进行头部攻击。该选项正确设置方式如下:

<code>DEBUG=True: ALLOWED_HOSTS可以为空</code><code>DEBUG=False: ALLOWED_HOSTS=['12.34.56.xx', 'www.example.com','127.0.0.1']</code>

正式部署项目时尽量不要设置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)跨站请求伪造攻击。

<code><em># 方法一: 从环境变量中读取SECRET_KEY</em></code><code>import os</code><code>SECRET_KEY = os.environ['SECRET_KEY']</code><code><br></code><code><em># 方法二: 从服务器上Django项目文件价外的某个文件读取</em></code><code>with open('/etc/secret_key.txt') as f:</code><code> SECRET_KEY = f.read().strip()</code>

INSTALLED_APPS

添加应用

<code>INSTALLED_APPS =</code><code> [ </code><code>'django.contrib.admin', <em>// 管理后台应用 </em></code><code>'django.contrib.auth', <em>// 用户身份认证 </em></code><code>'django.contrib.contenttypes', <em>// 追踪ORM模型与应用的对应关系 </em></code><code>'django.contrib.sessions', <em>// session应用 </em></code><code>'django.contrib.messages', <em>// 消息应用 </em></code><code>'django.contrib.staticfiles', <em>// 管理站点静态文件 </em></code><code>'app1.apps.App1Config', <em># 默认已有 如果没有只要添加app名称即可 例如:'app1' </em></code><code><em># 新建的应用都要在这里添加</em></code><code> ]</code>

认证

AUTH_USER_MODEL

注册自定义用户模型

<code><em># ,格式:“app应用名.表名称”</em></code><code><em># 告诉django,不要在生成user表,用用户自定义的表</em></code><code>AUTH_USER_MODEL = 'users.User'</code>

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

密码存储方式

<code>PASSWORD_HASHERS=[</code><code> 'django.contrib.auth.hashers.PBKDF2PasswordHasher',</code><code> 'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher',</code><code> 'django.contrib.auth.hashers.Argon2PasswordHasher',</code><code> 'django.contrib.auth.hashers.BCryptSHA256PasswordHasher',</code><code> ]</code>

AUTH_PASSWORD_VALIDATORS

用于检查用户密码强度的验证器列表。

AUTH_PASSWORD_VALIDATORS=[] #默认为空列表

如果需要添加请参考文章https://docs.djangoproject.com/zh-hans/4.1/topics/auth/passwords/#password-validation

MIDDLEWARE(中间件列表)

<code>MIDDLEWARE = [</code><code> 'django.middleware.security.SecurityMiddleware',</code><code> 'django.contrib.sessions.middleware.SessionMiddleware',</code><code> 'django.middleware.common.CommonMiddleware',</code><code> 'django.middleware.csrf.CsrfViewMiddleware',</code><code> 'django.contrib.auth.middleware.AuthenticationMiddleware',</code><code> 'django.contrib.messages.middleware.MessageMiddleware',</code><code> 'django.middleware.clickjacking.XFrameOptionsMiddleware',</code><code>]</code>

TEMPLATES

模板

<code>TEMPLATES = [</code><code> { <em># 基础模板</em></code><code> 'BACKEND': 'django.template.backends.django.DjangoTemplates',</code><code> <em># 全局模板,查找顺序 全局--->每一个app(static的查找顺序也是)</em></code><code> 'DIRS': [BASE_DIR, 'templates'],</code><code> 'APP_DIRS': True,</code><code> <em># 选项</em></code><code> 'OPTIONS': {</code><code> <em># 上下文处理器,作用:全局都可以拿到这个变量,例如在模板里面拿到request,user</em></code><code> 'context_processors': [</code><code> 'django.template.context_processors.debug',</code><code> 'django.template.context_processors.request',</code><code> 'django.contrib.auth.context_processors.auth',</code><code> 'django.contrib.messages.context_processors.messages',</code><code> ],</code><code> },</code><code> },</code><code>]</code>

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__.pyimport pymysqlpymysql.install_as_MySQLdb()

<code>DATABASES = {</code><code> 'default': { </code><code>'ENGINE': 'django.db.backends.mysql',</code><code> 'NAME': 'blog', <em>#你的数据库名称 数据库需要自己提前建好</em></code><code> 'USER': 'root', <em>#你的数据库用户名</em></code><code> 'PASSWORD': '', <em>#你的数据库密码</em></code><code> 'HOST': '', <em>#你的数据库主机,留空默认为localhost</em></code><code> 'PORT': '3306', <em>#你的数据库端口</em></code><code> }</code><code> }</code>

静态文件

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。注意里面的路径必需是绝对路径哦。

<code>方式一:</code><code> # 设置django的静态文件目录</code><code> STATICFILES_DIRS = [</code><code> os.path.join(BASE_DIR,"static")</code><code>    ]</code><code>方式二</code><code> STATICFILES_DIRS = [ </code><code>"/home/user/pictures",</code><code> "/opt/webfiles/myfiles",</code><code> ]</code>

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

知道如何找到不同位置的静态文件的查找器后端列表。

<code>STATICFILES_FINDERS=[</code><code> 'django.contrib.staticfiles.finders.FileSystemFinder',</code><code> 'django.contrib.staticfiles.finders.AppDirectoriesFinder',</code><code> ]</code>

文件上传

MEDIA_ROOT和MEDIA_URL

media文件价一般用于放置用户上传的文件。对于此文件夹的权限设置异常重要,因为用户可能会上传可执行的文件,影响网站和服务器的安全。

<code><em># 项目中存储上传文件的根目录[暂时配置],注意,uploads目录需要手动创建否则上传文件时报错</em></code><code>MEDIA_ROOT = os.path.join(BASE_DIR, "uploads")</code><code><em># 访问上传文件的url地址前缀(默认找到MEDIA_ROOT,跟static一样)</em></code><code>MEDIA_URL = "/media/"</code>

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’,表示本次安装的时区的字符串。

<code>LANGUAGE_CODE = 'zh-Hans' # 设置语言,'en-us':英文,'zh-Hans':中文 </code><code>TIME_ZONE = 'Asia/Shanghai' # 设置时区,'UTC':标准时区 格林威治时间,'Asia/Shanghai':亚洲上海时区</code><code>USE_I18N = True </code><code>USE_L10N = True </code><code>USE_TZ = False # 设置是否使用标准时区时间,我们设置为False 不适用标准时区</code>

邮箱配置

<code>EMAIL_HOST = 'smtp.qq.com' # 发送者邮箱服务器 </code><code>EMAIL_PORT = 25 # 端口</code><code>EMAIL_HOST_USER = '' # 发送者用户名(邮箱地址)</code><code>EMAIL_HOST_PASSWORD = '' # 发送者密码</code><code>EMAIL_USE_SSL = True </code><code>DEFAULT_FROM_EMAIL = 'xxx@qq.com'</code>

COOKIE与SESSION设置

Django默认支持Session,并且默认是将Session数据存储在数据库中,即:django_session 表中。

<code>SESSION_ENGINE = 'django.contrib.sessions.backends.db' <em># 引擎(默认)</em></code><code>SESSION_COOKIE_NAME = "sessionid" <em># Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认)</em></code><code>SESSION_COOKIE_PATH = "/" <em># Session的cookie保存的路径(默认)</em></code><code>SESSION_COOKIE_DOMAIN = None <em># Session的cookie保存的域名(默认)</em></code><code>SESSION_COOKIE_SECURE = False <em># 是否Https传输cookie(默认)</em></code><code>SESSION_COOKIE_HTTPONLY = True <em># 是否Session的cookie只支持http传输(默认)</em></code><code>SESSION_COOKIE_AGE = 1209600 <em># Session的cookie失效日期(2周)(默认)</em></code><code>SESSION_EXPIRE_AT_BROWSER_CLOSE = False <em># 是否关闭浏览器使得Session过期(默认)</em></code><code>SESSION_SAVE_EVERY_REQUEST = False <em># 是否每次请求都保存Session,默认修改之后才保存(默认)</em></code>

DATE_FORMAT

默认:’Nj,Y’ (例如 Feb.4,2003)

在系统的任何部分显示日期字段时使用的默认格式。例子

<code>USE_L10N = False</code><code>DATETIME_FORMAT = 'Y-m-d H:i:s'</code>

请注意,如果 USE_L10N 被设置为 True,那么本地决定的格式具有更高的优先权,并将被应用。

DATE_INPUT_FORMATS

在日期字段上输入数据时接受的格式列表。

<code>DATE_INPUT_FORMATS<em>#默认:</em></code><code>[</code><code> '%Y-%m-%d', <em># '2006-10-25'</em></code><code> '%m/%d/%Y', <em># '10/25/2006'</em></code><code> '%m/%d/%y', <em># '10/25/06'</em></code><code> '%b %d %Y', <em># 'Oct 25 2006'</em></code><code> '%b %d, %Y', <em># 'Oct 25, 2006'</em></code><code> '%d %b %Y', <em># '25 Oct 2006'</em></code><code> '%d %b, %Y', <em># '25 Oct, 2006'</em></code><code> '%B %d %Y', <em># 'October 25 2006'</em></code><code> '%B %d, %Y', <em># 'October 25, 2006'</em></code><code> '%d %B %Y', <em># '25 October 2006'</em></code><code> '%d %B, %Y', <em># '25 October, 2006'</em></code><code>]</code>

格式将按顺序被尝试,使用第一个有效的格式。当 USE_L10N为True 时,将采用本地规定的格式具有更高的优先权。

DATETIME_FORMAT

默认:’Nj,Y,P’ (例如 Feb.4,2003,4p.m.)

在系统的任何部分显示日期时间字段时使用的默认格式。如果 USE_L10N被设置为 True,那么本地决定的格式具有更高的优先权并将被应用。例子:

<code>USE_L10N = False</code><code>DATE_FORMAT = 'Y-m-d'</code>

DATETIME_INPUT_FORMATS

在日期时间字段上输入数据时可接受的格式列表。格式将按顺序被尝试,使用第一个有效的格式。默认:

<code>[</code><code> '%Y-%m-%d %H:%M:%S', <em># '2006-10-25 14:30:59'</em></code><code> '%Y-%m-%d %H:%M:%S.%f', <em># '2006-10-25 14:30:59.000200'</em></code><code> '%Y-%m-%d %H:%M', <em># '2006-10-25 14:30'</em></code><code> '%m/%d/%Y %H:%M:%S', <em># '10/25/2006 14:30:59'</em></code><code> '%m/%d/%Y %H:%M:%S.%f', <em># '10/25/2006 14:30:59.000200'</em></code><code> '%m/%d/%Y %H:%M', <em># '10/25/2006 14:30'</em></code><code> '%m/%d/%y %H:%M:%S', <em># '10/25/06 14:30:59'</em></code><code> '%m/%d/%y %H:%M:%S.%f', <em># '10/25/06 14:30:59.000200'</em></code><code> '%m/%d/%y %H:%M', <em># '10/25/06 14:30'</em></code><code>]</code>

TIME_FORMAT

默认:’P’ (例如 4p.m.)

在系统的任何部分显示时间字段时使用的默认格式。请注意,如果 USE_L10N 被设置为 True,那么本地决定的格式具有更高的优先权,并将被应用。

TIME_INPUT_FORMATS

在时间字段上输入数据时可接受的格式列表。默认:

<code>[</code><code> '%H:%M:%S', <em># '14:30:59'</em></code><code> '%H:%M:%S.%f', <em># '14:30:59.000200'</em></code><code> '%H:%M', <em># '14:30'</em></code><code>]</code>

格式将按顺序被尝试,使用第一个有效的格式。当 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'}
© 版权声明
THE END
喜欢就支持一下吧
点赞5 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容