1
This commit is contained in:
+155
-11
@@ -28,6 +28,11 @@ SECURE_HSTS_INCLUDE_SUBDOMAINS = True
|
||||
SECURE_HSTS_PRELOAD = True
|
||||
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
|
||||
|
||||
PASSWORD_HASHERS = [
|
||||
'django.contrib.auth.hashers.Argon2PasswordHasher',
|
||||
'django.contrib.auth.hashers.PBKDF2PasswordHasher',
|
||||
]
|
||||
|
||||
# SECURITY WARNING: keep the secret key used in production secret!
|
||||
SECRET_KEY = 'django-insecure-j+-psq=m++l7hup73k1eg+wm-b&2_)!+_^o=6(=xc$1px*kqt@'
|
||||
|
||||
@@ -67,12 +72,12 @@ ALLOWED_HOSTS = ["*"]
|
||||
CORS_ALLOWED_ORIGINS = [
|
||||
"http://localhost:3000", # 例如:您的React/Vue开发服务器
|
||||
"http://127.0.0.1:3000",
|
||||
"http://192.168.1.4:3000",
|
||||
"https://192.168.1.4:3000",
|
||||
"http://*",
|
||||
"https://*"
|
||||
]
|
||||
|
||||
# CORS设置
|
||||
CORS_ALLOW_ALL_ORIGINS = False
|
||||
|
||||
# 允许凭据
|
||||
CORS_ALLOW_CREDENTIALS = True
|
||||
@@ -143,6 +148,17 @@ SIMPLE_JWT = {
|
||||
'USER_ID_CLAIM': 'user_id',
|
||||
}
|
||||
|
||||
# 邮件部分
|
||||
|
||||
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' # 使用SMTP
|
||||
EMAIL_HOST = 'smtp.qq.com' # 需要真实的SMTP服务器
|
||||
EMAIL_PORT = 465
|
||||
EMAIL_USE_SSL = True
|
||||
EMAIL_HOST_USER = 'cs10086086@qq.com' # 真实邮箱账号
|
||||
EMAIL_HOST_PASSWORD = 'ldzpymytsinkfjhb' # 真实密码/授权码
|
||||
EMAIL_USE_TLS = False
|
||||
|
||||
|
||||
AUTH_USER_MODEL = 'user.FUser'
|
||||
|
||||
INSTALLED_APPS = [
|
||||
@@ -155,6 +171,8 @@ INSTALLED_APPS = [
|
||||
'django.contrib.contenttypes',
|
||||
'django.contrib.sessions',
|
||||
'django.contrib.messages',
|
||||
'django.contrib.staticfiles',
|
||||
'django.contrib.sites',
|
||||
|
||||
|
||||
# 第三方应用
|
||||
@@ -168,7 +186,122 @@ INSTALLED_APPS = [
|
||||
|
||||
]
|
||||
|
||||
|
||||
# Database
|
||||
# https://docs.djangoproject.com/en/6.0/ref/settings/#databases
|
||||
|
||||
DATABASES = {
|
||||
'default': {
|
||||
'ENGINE': 'django.db.backends.mysql',
|
||||
'NAME': 'chunyu_project', # 数据库名
|
||||
'USER': 'root', # 数据库用户名
|
||||
'PASSWORD': 'mysql_NpyMCS', # 数据库密码
|
||||
'HOST': '192.168.1.4', # 数据库主机,留空默认为localhost
|
||||
'PORT': '3306', # 数据库端口,留空默认为3306
|
||||
'OPTIONS': {
|
||||
'charset': 'utf8mb4',
|
||||
'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
|
||||
'connect_timeout': 10, # 连接超时时间(秒)
|
||||
},
|
||||
'CONN_MAX_AGE': 3600, # 连接池最大存活时间(秒),0表示每次请求后关闭
|
||||
'CONN_HEALTH_CHECKS': True, # 连接健康检查
|
||||
'ATOMIC_REQUESTS': False, # 是否将每个HTTP请求包装在事务中
|
||||
'AUTOCOMMIT': True, # 是否自动提交事务
|
||||
'TIME_ZONE': 'Asia/Shanghai',
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
# Redis配置
|
||||
REDIS_HOST = '192.168.1.4' # Redis服务器地址
|
||||
REDIS_PORT = 6379 # Redis端口
|
||||
REDIS_DB = 0 # Redis数据库编号
|
||||
REDIS_PASSWORD = "+Xy2173240465" # Redis密码,没有密码则设为None
|
||||
SESSION_DB = 1
|
||||
CELERY_BROKER_DB = 2
|
||||
CELERY_RESULT_BACKEND_DB = 2
|
||||
|
||||
# Django缓存配置(使用Redis作为缓存后端)
|
||||
CACHES = {
|
||||
"default": {
|
||||
"BACKEND": "django_redis.cache.RedisCache",
|
||||
"LOCATION": f"redis://{REDIS_HOST}:{REDIS_PORT}/{REDIS_DB}",
|
||||
|
||||
"OPTIONS": {
|
||||
"CLIENT_CLASS": "django_redis.client.DefaultClient",
|
||||
"PASSWORD": REDIS_PASSWORD,
|
||||
"PARSER_CLASS": "redis.connection._HiredisParser", # 使用hiredis提高性能
|
||||
'CONNECTION_POOL_CLASS': 'redis.BlockingConnectionPool',
|
||||
'CONNECTION_POOL_CLASS_KWARGS': {
|
||||
'max_connections': 50,
|
||||
'timeout': 20,
|
||||
},
|
||||
'MAX_CONNECTIONS': 50,
|
||||
'PICKLE_VERSION': -1,
|
||||
'SOCKET_CONNECT_TIMEOUT': 5,
|
||||
'SOCKET_TIMEOUT': 5,
|
||||
'COMPRESSOR': 'django_redis.compressors.zlib.ZlibCompressor',
|
||||
'SERIALIZER': 'django_redis.serializers.json.JSONSerializer',
|
||||
'COMPRESS_MIN_LENGTH': 1024 * 10,
|
||||
'IGNORE_EXCEPTIONS': True, # 缓存宕机时不崩溃
|
||||
},
|
||||
"KEY_PREFIX": "django_", # 缓存键前缀
|
||||
"VERSION": 1, # 缓存版本
|
||||
},
|
||||
'session': {
|
||||
'BACKEND': 'django_redis.cache.RedisCache',
|
||||
'LOCATION': f"redis://{REDIS_HOST}:{REDIS_PORT}/{SESSION_DB}",
|
||||
'OPTIONS': {
|
||||
'CLIENT_CLASS': 'django_redis.client.DefaultClient',
|
||||
}
|
||||
},
|
||||
'celery': {
|
||||
'BACKEND': 'django_redis.cache.RedisCache',
|
||||
'LOCATION': 'redis://:password@redis-celery:6379/0',
|
||||
'OPTIONS': {
|
||||
'CLIENT_CLASS': 'django_redis.client.DefaultClient',
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# 会话配置
|
||||
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
|
||||
SESSION_CACHE_ALIAS = 'session'
|
||||
SESSION_COOKIE_AGE = 1209600
|
||||
SESSION_COOKIE_SECURE = True
|
||||
SESSION_COOKIE_HTTPONLY = True
|
||||
SESSION_COOKIE_SAMESITE = 'Lax'
|
||||
|
||||
# Celery配置
|
||||
CELERY_BROKER_URL = f'redis://:{REDIS_PASSWORD}@{REDIS_HOST}:{REDIS_PORT}/{CELERY_BROKER_DB}'
|
||||
CELERY_RESULT_BACKEND = f'redis://:{REDIS_PASSWORD}@{REDIS_HOST}:{REDIS_PORT}/{CELERY_RESULT_BACKEND_DB}'
|
||||
CELERY_CACHE_BACKEND = 'celery'
|
||||
CELERY_BROKER_CONNECTION_RETRY_ON_STARTUP = True
|
||||
|
||||
# 缓存中间件
|
||||
CACHE_MIDDLEWARE_ALIAS = 'default'
|
||||
CACHE_MIDDLEWARE_SECONDS = 60 * 15
|
||||
CACHE_MIDDLEWARE_KEY_PREFIX = 'chunyu_site'
|
||||
|
||||
# 安全头
|
||||
SECURE_BROWSER_XSS_FILTER = True
|
||||
SECURE_CONTENT_TYPE_NOSNIFF = True
|
||||
X_FRAME_OPTIONS = 'DENY'
|
||||
|
||||
# 定时任务:预热缓存
|
||||
CELERY_BEAT_SCHEDULE = {
|
||||
'warm-up-cache-every-hour': {
|
||||
'task': 'core.tasks.warm_up_cache',
|
||||
'schedule': 3600.0, # 每小时
|
||||
},
|
||||
'generate-daily-report': {
|
||||
'task': 'reports.tasks.generate_daily_report',
|
||||
'schedule': 86400.0, # 每天
|
||||
},
|
||||
}
|
||||
|
||||
MIDDLEWARE = [
|
||||
'django.middleware.cache.UpdateCacheMiddleware',
|
||||
'django.middleware.security.SecurityMiddleware',
|
||||
'django.contrib.sessions.middleware.SessionMiddleware',
|
||||
'corsheaders.middleware.CorsMiddleware',
|
||||
@@ -177,8 +310,13 @@ MIDDLEWARE = [
|
||||
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
||||
'django.contrib.messages.middleware.MessageMiddleware',
|
||||
'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
||||
'django.middleware.cache.FetchFromCacheMiddleware',
|
||||
]
|
||||
|
||||
CACHE_MIDDLEWARE_ALIAS = 'default'
|
||||
CACHE_MIDDLEWARE_SECONDS = 60 * 15 # 15分钟
|
||||
CACHE_MIDDLEWARE_KEY_PREFIX = 'mysite'
|
||||
|
||||
ROOT_URLCONF = 'chunyu_project.urls'
|
||||
|
||||
TEMPLATES = [
|
||||
@@ -200,16 +338,13 @@ TEMPLATES = [
|
||||
ASGI_APPLICATION = 'chunyu_project.asgi.application'
|
||||
|
||||
|
||||
# Database
|
||||
# https://docs.djangoproject.com/en/6.0/ref/settings/#databases
|
||||
|
||||
DATABASES = {
|
||||
'default': {
|
||||
'ENGINE': 'django.db.backends.sqlite3',
|
||||
'NAME': BASE_DIR / 'db.sqlite3',
|
||||
}
|
||||
}
|
||||
|
||||
# 使用Redis作为会话后端
|
||||
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
|
||||
SESSION_CACHE_ALIAS = "default"
|
||||
# 使用Redis作为消息代理
|
||||
CELERY_BROKER_URL = 'redis://localhost:6379/0'
|
||||
CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'
|
||||
|
||||
# Password validation
|
||||
# https://docs.djangoproject.com/en/6.0/ref/settings/#auth-password-validators
|
||||
@@ -246,3 +381,12 @@ USE_TZ = True
|
||||
# https://docs.djangoproject.com/en/6.0/howto/static-files/
|
||||
|
||||
STATIC_URL = 'static/'
|
||||
|
||||
STATICFILES_DIRS = [
|
||||
BASE_DIR / "static",
|
||||
]
|
||||
|
||||
STATIC_ROOT = BASE_DIR / "staticfiles"
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user