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),
}