django settings配置文件教程
2022年7月5日大约 4 分钟约 1262 字
rest_framework配置
关于drf的settings配置的默认值可以在源码里面找到:rest_framework/settings.py
project_name/settings.py
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination', # 修改默认的分页类型,使用每页数量和页面编号来分页
'PAGE_SIZE': 20, # 每个页面的数量,配置完后立马有分页功能,并且json数据格式会调整,还会多出几个字段:count、next、previous,文件路径字段还会添加完整域名
}
mysql数据库配置
>>> settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'database',
'USER': 'username',
'PASSWORD': 'password',
'HOST': 'example.com',
'OPTIONS': {
"init_command": "SET sql_mode='STRICT_TRANS_TABLES'" #设置为严格模式
}
}
}
模板搜索路径配置:
TEMPLATES = [
{
'DIRS': [os.path.join(BASE_DIR, 'templates')]
}
静态文件目录配置:
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'),
]
# STATIC_ROOT = os.path.join(BASE_DIR, "static")
STATICFILES_DIRS
和STATIC_ROOT
同时存在会报错,STATIC_ROOT
是用命令搜集静态文件时使用。
创建apps文件夹,存放app。
>>> settings.py
sys.path.insert(0, os.path.join(BASE_DIR, "apps")) #将apps文件夹添加到系统路径搜索的第一个
settings.py配置示例
#BASE_DIR 即为 项目的根目录路径。我们在后面的与目录有关的变量都用它
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
#当 DEBUG=False 时,这个为必填项,如果不想输入,可以用 ALLOW_HOSTS = ['*'] 来允许所有的。
#ALLOWED_HOSTS = ['*.besttome.com','www.ziqiangxuetang.com']
ALLOWED_HOSTS = ['*']#允许你设置哪些域名可以访问
#-------------------------------app-------------------------------
INSTALLED_APPS = [
'django.contrib.admin', # 后台管理系统
'django.contrib.auth', # 认证相关的app,登陆,退出,重设密码等相关的视图函数
'django.contrib.contenttypes',
# session会话包,默认启用的。如果你不用的话,也可以关掉这个以节省一点服务器的开销
'django.contrib.sessions', # sessionid相关
'django.contrib.messages',
'django.contrib.staticfiles',
# 自己的App,如果不加到 INSTALL_APPS 中的话, django 就不能自动找到app中的模板文件(app-name/templates/)和静态文件(app-name/static/)
'indexapp.apps.IndexappConfig',
]
#-------------------------------中间件-------------------------------
# 按照从上到下的顺序执行中间件中的 process_request 函数,从下到上执行process_response 函数
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware', # session会话中间件
'django.middleware.common.CommonMiddleware', # 方便使用一些功能
'django.middleware.csrf.CsrfViewMiddleware', # 防止csrf工具,post请求使用csrf
'django.contrib.auth.middleware.AuthenticationMiddleware', # 认证功能
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
#'django.middleware.cache.CacheMiddleware',#使用缓存系统
#'django.middleware.gzip.GzipMiddleware',#对传输的数据压缩,减少带宽
]
#-------------------------------模板-------------------------------
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
#模板文件的位置。添加项目下的templates目录为模板文件位置,
'DIRS': [os.path.join(BASE_DIR, 'templates')]
,
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [ # 上下文渲染器 其实就是函数返回字典,这些值可用在模板中
'django.template.context_processors.debug',
# 返回一个字典,每一个模板中都可以使用这个字典中提供的 request 变量
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
'''Django 模板查找机制:
Django 查找模板的过程是在每个 app 的 templates 文件夹中找(而不只是当前 app 中的代码只在当前的 app 的 templates 文件夹中找)。
各个 app 的 templates 形成一个文件夹列表,Django 遍历这个列表,一个个文件夹进行查找,当在某一个文件夹找到的时候就停止,所有的都遍历完了还找不到指定的模板的时候就是 Template Not Found (过程类似于Python找包)。
这样设计有利当然也有弊,有利是的地方是一个app可以用另一个app的模板文件,弊是有可能会找错了。
所以我们使用的时候在 templates 中建立一个 app 同名的文件夹,这样就好了。
这就需要把每个app中的 templates 文件夹中再建一个 app 的名称,仅和该app相关的模板放在 app/templates/app/ 目录下面'''
#-------------------------------mysql数据配置-------------------------------
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'baidu_chain',
'USER': 'baidu_chain',
'PASSWORD': 'gfqerhq3rHGasdg#235j7@kj57j3k',
'HOST': 'rm-bp1r086uln4u311uloo.mysql.rds.aliyuncs.com',
'OPTIONS': {
"init_command": "SET sql_mode='STRICT_TRANS_TABLES'" # 设置为严格模式
}
}
}
#--------------------------------静态文件------------------------------------
"""
#静态文件放在对应的 app 下的 static 文件夹中,部署时用 python manage.py collectstatic 就可以把静态文件收集到(复制到) STATIC_ROOT 目录
或者 STATICFILES_DIRS 中的文件夹中
当 settings.py 中的 DEBUG = True 时,
打开开发服务器 python manage.py runserver 直接访问 /static/zqxt.png 就可以找到某个静态文件
"""
# url访问路径
STATIC_URL = '/static/'
# 静态文件查找目录
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'),
#'/var/www/static/'
]
#STATIC_ROOT 文件夹是用来收集所有的静态文件的,方便后面我们用 nginx, apache 等来部署
#STATIC_ROOT = os.path.join(BASE_DIR,'static')
#--------------------------------媒体文件-----------------------------------
#media文件夹的url访问路径
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR,'media')
#MEDIA_ROOT = "F:/uploads"
#--------------------------------------缓存系统----------------------------
settings变量全局引用方法
from django.conf import settings
settings.BASE_DIR
自定义上下文渲染器
有时候我们想让一个模板变量在多个模板中都要有,不如导航内容,又不想每个视图函数都写一次。
上下文渲染器/context_processor 其实就是返回字典的函数
字典的 keys 可以用在模板变量
新建上下文渲染器:
#>>> vim demoProject/demoProject/context_processor.py
from django.conf import settings
# 显示配置信息
def project_settings(request):
return {'settings': settings}
# 显示客户端ip地址
def ip_address(request):
return {'ip_address': request.META['REMOTE_ADDR']}
加入到配置:
#>>> vim demoProject/demoProject/settings.py
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
# 把新建的两个上下文渲染器加入进来
'demoProject.context_processor.project_settings',
'demoProject.context_processor.ip_address',
],
},
},
]