django项目的开发过程中,在对整个框架不够了解之前,内容仅靠模糊的记忆可能会导致一系列的未知问题(例如一个字母写错)。
全局配置文件settings中的配置,往往可以映射整个项目所需要的内容。
(django版本1.11)
默认的配置
其实不算是默认的,只是在创建项目之后,已经为我们写了一些配置(当然,你可以在保证正确的前提下随意更改它们的顺序),在它的基础上进行更改,我将按默认的顺序从上到下进行介绍
1. 主机验证 ALLOWED_HOSTS
表示此Django站点可以投放的主机/域名的字符串列表。这是防止HTTP主机头部攻击的安全措施。
- “ * ”表示可以匹配任何ip,在这种情况下,您有责任提供您自己对Host头的验证。
- 如果主机头(或X-Forwarded-Host(如果USE_X_FORWARDED_HOST已启用))与此列表中的任何值不匹配,则django.http.HttpRequest.get_host()方法将引发SuspiciousOperation。
- 当DEBUG为True并且ALLOWED_HOSTS为空时,主机将针对[‘localhost’,’127.0.0.1’,’[:: 1]’]进行验证。
- 此验证仅适用于get_host();如果您的代码直接从request.META访问Host头,您将绕过此安全保护。
2. INSTALLED_APPS
这应该是django中最常用的配置,在每个app创建之后,尽量都在这里进行配置
django-simple-captcha是django中的一个验证码包,这个包本身也是一个django的app,所以需要写在这里,并且别忘了给这个包添加路由。
3. TEMPLATES
这里是进行模板文件目录的配置,往往只需更改图中红线标注的位置。
4. DATABASES
DATABASES是进行数据库的配置,默认的数据库是sqlite,下图是更改为mysql之后的配置
注意NAME是指数据库名
5. 语言和时区
- 这里的语言配置会影响到admin后台中的展示语言
- 默认的时间是格林尼治时间,我们处于东八区,配置北京和上海的都可以
6. 静态文件配置 STATIC
静态文件的配置是为了我们能应用本地的css,js,图片等;
STATIC_URL已经为我们写好,我们在加上一个STATICFILES_DIRS(静态文件的路径)
添加的配置
添加的配置是在开发过程根据需要添加在settings文件中的,排名不分先后,因为整个文件都是不需要有顺序的。可能还不是全部的,但尽量会在使用之后更新.
1. 自定义用户模型 AUTH_USER_MODEL
配置用户模型类,就是django中admin后台的用户,但是其中的信息未必有我们需要的字段,因此我们需要自定义用户模型,在这里配置之后,就会不在使用默认的用户模型
2. 自定义验证类 AUTHENTICATION_BACKENDS
这是登录时使用的验证类,同上,因为默认的未必能满足我们的需求。
3. 邮箱配置EMAIL
这是发送邮件进行的配置
4. LOGIN_URL
在使用了login_required装饰器之后,指定没有登录情况下访问路由失败而跳转的页面
5. 配置Django服务器日志
首先在项目的根目录下创建一个log文件夹,然后在settings中添加以下内容
在运行项目时就会在log文件夹中生成日志文件
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
'standard': {
'format': '%(asctime)s [%(threadName)s:%(thread)d] [%(name)s:%(lineno)d] [%(module)s:%(funcName)s] [%(levelname)s]- %(message)s'} #日志格式
},
'filters': {
},
'handlers': {
'mail_admins': {
'level': 'ERROR',
'class': 'django.utils.log.AdminEmailHandler',
'include_html': True,
},
'default': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'filename': 'log/all.log', # 日志输出文件
'maxBytes': 1024*1024*5, # 文件大小
'backupCount': 5, # 备份份数
'formatter': 'standard', # 使用哪种formatters日志格式
},
'error': {
'level': 'ERROR',
'class': 'logging.handlers.RotatingFileHandler',
'filename': 'log/error.log',
'maxBytes': 1024*1024*5,
'backupCount': 5,
'formatter': 'standard',
},
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': 'standard'
},
'request_handler': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'filename': 'log/error.log',
'maxBytes': 1024*1024*5,
'backupCount': 5,
'formatter': 'standard',
},
'scprits_handler': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'filename': 'log/script.log',
'maxBytes': 1024*1024*5,
'backupCount': 5,
'formatter': 'standard',
}
},
'loggers': {
'django': {
'handlers': ['default', 'console'],
'level': 'DEBUG',
'propagate': False
},
'django.request': {
'handlers': ['request_handler'],
'level': 'DEBUG',
'propagate': False,
},
'scripts': {
'handlers': ['scprits_handler'],
'level': 'INFO',
'propagate': False
},
'blog.views': {
'handlers': ['default', 'error'],
'level': 'DEBUG',
'propagate': True
},
}
}