学习笔记:Django之settings文件设置

聂昱
2023-12-01

import os

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# 配置文件中的BASE_DIR用于获取项目在计算机中的绝对路径,为配置文件中的其他参数所用。在非必要的情冴下,不要修改该参数值。



# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/3.0/howto/deployment/checklist/


# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'tpg%709x-%yytez_)r)2d)%72(ghb6lz5gtj3s#sa%cd5b_*tm'
# 项目在创建时会随机为SECRET_KEY提供密钥值,该参数可以保证用户密码、CSRF[4]、Session等数据被加密,提高项目运行的安全性。没有特殊理由,无须修改该值。若没有设置SECRET_KEY,则Django将无法启动。


# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
# 调试模式,True为开发环境,False为生产环境
# DEBUG 的值为 True,意味着运行项目时若发生代码出错问题,将在调试界面上直接报告出错信息,以便程序员对代码进行调试。在正式生产运行环境下,必须把这个值设置为False,否则会产生网站安全问题。


ALLOWED_HOSTS = []
# 可访问域名参数用于限制不同情况下的访问网站许可策略,以增强网站的安全性。
# 在DEBUG=True、ALLOWED_HOSTS=[]情况下,网站只接受以localhost或127.0.0.1的被访问,这也是主要的开发调试模式。
# 实际生产环境部署,DEBUG=False,则ALLOWED_HOSTS的列表中应该挃定可以访问的域名范围。指定范围为['www.example.com'],表示只允许访问该域名;指定范围为['*'],表示允许访问所有域名。


# Application definition

# 应用(App)列表
INSTALLED_APPS = [
    'django.contrib.admin',  # admin内置的后台管理系统
    'django.contrib.auth',  # auth内置的用户认证系统
    'django.contrib.contenttypes',  # contenttypes记录项目中u偶有model元数据(Django的ORM框架)
    'django.contrib.sessions',  # 内置的session会话功能,用于表示当前访问网站的用户身份,记录相关用户信息
    'django.contrib.messages',  # 内置的消息提示功能
    'django.contrib.staticfiles',  # 内置的查找静态资源路径
    'user',  # 添加项目应用user
    'corsheaders',
    'rest_framework',  # 添加Django Rest Framework 框架
    'django_filters',  # 过滤模块
]


# 中间件(Middleware)是一个用来处理Django的请求(Request)和响应(Response)的框架级别的钩子,
# 它是一个轻量、低级别的插件系统,用于在全局范围内改变Django的输入和输出。
MIDDLEWARE = [
    # SecurityMiddleware内置的安全机制,保护用户与网站的通信安全
    'django.middleware.security.SecurityMiddleware',
    # SessionMiddleware会话Session功能
    'django.contrib.sessions.middleware.SessionMiddleware',
    # 跨域访问
    'corsheaders.middleware.CorsMiddleware',
    # 添加中间件LocaleMiddleware国际化和本地化功能,使得Django内置的功能支持中文显示
    'django.middleware.locale.LocaleMiddleware',
    # CommonMiddleware处理请求信息,规范化请求内容
    'django.middleware.common.CommonMiddleware',
    # CsrfViewMiddleware开启CSRF防护功能
    'django.middleware.csrf.CsrfViewMiddleware',
    # AuthenticationMiddleware开启内置的用户认证系统
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    # MessageMiddleware开启内置的信息提示功能。
    'django.contrib.messages.middleware.MessageMiddleware',
    # XFrameOptionsMiddleware防止恶意程序单击劫持。
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]


# ROOT_URLCONF 用于指定项目根路由配置文件地址,默认值无须改动。
ROOT_URLCONF = 'study.urls'


# 模板列表
TEMPLATES = [
    {
        # BACKEND定义模板引擎,用于识别模板里面的变量和指令。
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        # DIRS设置模板所在路径,告诉Django在那个地方查找模板的位置,默认为空列表。
        'DIRS': [os.path.join(BASE_DIR, 'templates'),
                 os.path.join(BASE_DIR, 'index/templates'),
                 os.path.join(BASE_DIR, 'user/templates')
                 ],
        # APP_DIRS是否在App里查找模板文件
        'APP_DIRS': True,
        # OPTIONS用于填充在RequestContext的上下文(模板里面的变量和指令),一般不做任何修改
        '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',
            ],
        },
    },
]


WSGI_APPLICATION = 'study.wsgi.application'


# Database 数据库配置
# https://docs.djangoproject.com/en/3.0/ref/settings/#databases
# 不同数据库系统需要通过ENGINE提供不同的数据库引擎。Django提供了PostgreSQL、MySQL、SQLite3、Oracle这4种数据库引擎。
# 'django.db.backends.postgresql'对应PostgreSQL数据库引擎。
# 'django.db.backends.mysql'对应MySQL数据库引擎。
# 'django.db.backends.sqlite3'对应SQLite3数据库引擎。
# 'django.db.backends.oracle'对应Oracle数据库引擎。


DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}
# mysqlclient连接MySQL
    'default': {
        'ENGINE': 'django.db.backends.mysql',  # 数据库引擎
        'NAME': 'test',  # 数据库名
        'USER': 'root',  # 账号
        'PASSWORD': '123456',  # 密码
        'HOST': 'localhost',  # IP地址
        'POST': '3306',  # 端口
    }
}


# 加入需要多数据库连接,示例如下
# DATABASES = {
# # 第一个数据库
# 'default': {
#         'ENGINE': 'django.db.backends.mysql',
#         'NAME': 'django_db',
#         'USER':'root',
#         'PASSWORD':'1234',
#         'HOST':'127.0.0.1',
#         'PORT':'3306',
#     },
# # 第二个数据库
# 'MyDjango': {
#         'ENGINE': 'django.db.backends.mysql',
#         'NAME': 'mydjango_db',
#         'USER':'root',
#         'PASSWORD':'1234',
#         'HOST':'127.0.0.1',
#         'PORT':'3306',
#     },
# # 第三个数据库
# 'MySqlite3': {
#         'ENGINE': 'django.db.backends.sqlite3',
#         'NAME': os.path.join(BASE_DIR, 'sqlite3'),
#     },
# }




# Password validation
# https://docs.djangoproject.com/en/3.0/ref/settings/#auth-password-validators
# 用户密码验证检查
# 当用户输入密码后,对AUTH_PASSWORD_VALIDATORS进行参数配置可以为密码的安全提供不同等级的验证功能。
# 若不配置这些参数,则意味着接受所有密码。

AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },  # 检查输入的密码和用户属性集合之间的相似性
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },  # 检查密码是否符合最小长度,最少需要9个字符
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },  # 检查密码是否在常用密码列表中(防止密码设置太简单)
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },  # 检查密码是否完全由数字组成
]




# Internationalization
# https://docs.djangoproject.com/en/3.0/topics/i18n/


# 国家语言代码:默认值是'en-us'(美式英语),可以设置为'zh-hans',表示显示中文。
LANGUAGE_CODE = 'en-us'

# 设置时区,默认值为'UTC',指世界标准时间。可以将其设置为'Asia/Shanghai',表示中国上海时间。
TIME_ZONE = 'UTC'


USE_I18N = True


USE_L10N = True


USE_TZ = True




# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.0/howto/static-files/
# 资源路由--STATIC_URL
STATIC_URL = '/static/'


# 资源集合--STATICFILES_DIRS
# 设置根目录的静态资源文件夹static,及app(index)的静态资源文件夹Mystatic
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'),
                    os.path.join(BASE_DIR, 'index/Mystatic'),
                    ]


# 资源部署--STATIC_ROOT
# 静态资源配置还有STATIC_ROOT,其作用是在服务器上部署项目,实现服务器和项目之间的映射。


# 媒体资源--MEDIA
# 媒体资源和静态资源是可以同时存在的,而且两者可以独立运行,互不影响
# 而媒体资源只有配置属性MEDIA_URL和MEDIA_ROOT。
# 设置媒体路由地址信息
MEDIA_URL = '/media/'
# 获取media文件夹的完整路径信息
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')


# drf框架的配置信息
REST_FRAMEWORK = {
    # 设置所有接口都需要被验证
    'DEFAULT_PERMISSION_CLASSES': (
        # IsAuthenticated权限类将拒绝任何未通过身份验证的用户访问,API只能由注册用户访问
        'rest_framework.permissions.IsAuthenticated',
        # IsAdminUser权限仅允许user.is_staff为True用户访问,其他任何用户都将被拒绝。
        # 'rest_framework.permissions.IsAdminUser',
        # IsAuthenticatedOrReadOnly未验证用户可以请求安全的方法:GET,HEAD或OPTIONS。
        # 'rest_framework.permissions.IsAuthenticatedOrReadOnly',
    ),
    # 用户登陆认证方式
    'DEFAULT_AUTHENTICATION_CLASSES': (
        # 'rest_framework.authentication.SessionAuthentication',
        # 'rest_framework.authentication.BasicAuthentication',
        'rest_framework_jwt.authentication.JSONWebTokenAuthentication',  # 使用JWT进行授权
    ),
    # 过滤类配置
    # 'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend',),
}


# jwt载荷中的有效期设置
JWT_AUTH = {
    # token 有效期
    'JWT_EXPIRATION_DELTA': datetime.timedelta(hours=8),
    # 开启Token更新
    'JWT_ALLOW_REFRESH': True,
    # 续期有效期(该设置可在24小时内带未失效的token 进行续期)
    'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(hours=24),
    # 自定义返回格式,需要手工创建
    'JWT_RESPONSE_PAYLOAD_HANDLER': 'user.utils.jwt_response_payload_handler',
}

#  添加Cors配置
# 1.设置白名单 凡是出现在白名单中的域名,都可以访问后端接口
CORS_ORIGIN_ALLOW_ALL = True  # 所有人都可以
# 或者设置白名单
# CORS_ORIGIN_WHITELIST = ('http://192.168.2.175:5500',)
# 2.设置Cors Cookie 的操作
CORS_ALLOW_CREDENTIALS = True  # 指明在跨域访问中,后端是否支持对cookie的操作


设置时区

LANGUAGE_CODE = 'zh-hans'  # 中文支持,django1.8以后支持;1.8以前是zh-cn
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
USE_TZ = True  # 默认是Ture,时间是utc时间,使用本地时间时,可改为false。

App文件夹设置

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))
"""
上面这行是-->把apps文件夹添加成python可识别的文件夹
sys.path是个列表。
在列表末尾添加目录,用sys.path.append()。当这个append执行完之后,新目录即时起效,以后的每次import操作都会检查这个目录。
在列表的任意位置添加目录,选择用sys.path.insert(index,’/path’)这样新添加的目录会优先于其他目录被import检查。其中,index:列表索引,path,目录所在路径。
"""

django-rest-framework-jwt设置

# =↓=↓=↓=↓=↓=↓=↓=↓=↓=↓=↓= django-rest-framework-jwt设置 =↓=↓=↓=↓=↓=↓=↓=↓=↓=↓=↓=
REST_FRAMEWORK = {
    # 过滤器默认后端
    'DEFAULT_FILTER_BACKENDS': [
        'django_filters.rest_framework.DjangoFilterBackend'
    ],
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework_simplejwt.authentication.JWTAuthentication',  # django_rest_framework_simplejwt JWT认证
    ],
}


SIMPLE_JWT = {
    'REFRESH_TOKEN_LIFETIME': timedelta(days=15),  # 配置REFRESH过期时间
    'ROTATE_REFRESH_TOKENS': True,
}


AUTHENTICATION_BACKENDS = (
    'myapp.views.MyCustomBackend',
)
# =↑=↑=↑=↑=↑=↑=↑=↑=↑=↑=↑= django-rest-framework-jwt设置 =↑=↑=↑=↑=↑=↑=↑=↑=↑=↑=↑=

REST_FRAMEWORK = {
    'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema',  # 生成drf自动文档
    # settings配置全局认证,配置登录
    'DEFAULT_AUTHENTICATION_CLASSES': [
     'rest_framework_simplejwt.authentication.JWTAuthentication',  # djangorestframework_simplejwt JWT认证
     'rest_framework.authentication.BasicAuthentication',  # Basic认证(账号密码)
     'rest_framework.authentication.SessionAuthentication',  # Session认证

    ]
}


# 自定设置要覆盖Simple JWT的默认设置。
from datetime import timedelta
SIMPLE_JWT = {
    'ACCESS_TOKEN_LIFETIME': timedelta(days=1),  # 配置ACCESS过期时间
    'REFRESH_TOKEN_LIFETIME': timedelta(days=15), # 配置REFRESH过期时间
    'ROTATE_REFRESH_TOKENS': True,
}


Simple JWT的默认设置如下所示:
DEFAULTS = {
    'ACCESS_TOKEN_LIFETIME': timedelta(minutes=5),
    'REFRESH_TOKEN_LIFETIME': timedelta(days=1),
    'ROTATE_REFRESH_TOKENS': False,
    'BLACKLIST_AFTER_ROTATION': True,
    'ALGORITHM': 'HS256',
    'SIGNING_KEY': settings.SECRET_KEY,
    'VERIFYING_KEY': None,
    'AUDIENCE': None,
    'ISSUER': None,
    'AUTH_HEADER_TYPES': ('Bearer',),
    'USER_ID_FIELD': 'id',
    'USER_ID_CLAIM': 'user_id',
    'AUTH_TOKEN_CLASSES': ('rest_framework_simplejwt.tokens.AccessToken',),
    'TOKEN_TYPE_CLAIM': 'token_type',
    'JTI_CLAIM': 'jti',
    'SLIDING_TOKEN_REFRESH_EXP_CLAIM': 'refresh_exp',
    'SLIDING_TOKEN_LIFETIME': timedelta(minutes=5),
    'SLIDING_TOKEN_REFRESH_LIFETIME': timedelta(days=1),
}

 类似资料: