Files
a_long/a_long_dianjing/settings.py
2026-06-14 02:38:05 +08:00

461 lines
13 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
Django settings for a_long_dianjing project.
开发环境配置 - 参照旧项目结构精简
"""
from pathlib import Path
from datetime import timedelta
import os
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
# Quick-start development settings - unsuitable for production
SECRET_KEY = '' # 开发环境可暂用,生产必须改
DEBUG = True # 开发环境为 True
ALLOWED_HOSTS = ['localhost', '127.0.0.1'] # 根据开发前端地址可添加
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# 第三方应用 (根据 requirements.txt 已安装的)
'rest_framework',
'rest_framework_simplejwt',
'corsheaders',
'django_celery_results',
# 你的自定义应用 (按已创建的拼音命名)
'celery',
'yonghu',
'dingdan',
'shangpin',
'peizhi',
'houtai',
# 'games', # 【待确认】你提到 games 还没创建,暂不添加
'utils',
'shangdian',
'dengji',
]
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware', # 跨域中间件放最前
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware', # 默认开启如API无需可注释
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
# 'guanapi.middleware.OpLogMiddleware', # 【待确认】这是旧项目的自定义中间件,新项目需要吗?
]
ROOT_URLCONF = 'a_long_dianjing.urls'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR / 'templates'],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
WSGI_APPLICATION = 'a_long_dianjing.wsgi.application'
# Database
# 根据你提供的信息配置 (本地开发端口3307)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'a_long_dianjing', # 你创建的数据库名
'USER': 'root', # 你的本地MySQL用户名
'PASSWORD': 'root', # 你的本地MySQL密码
'HOST': 'localhost',
'PORT': '3307', # 注意端口是3307
'OPTIONS': {
'charset': 'utf8mb4',
'init_command': "SET time_zone='+08:00'", # 保持与旧项目一致
}
}
}
# Password validation
AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]
# Internationalization
LANGUAGE_CODE = 'zh-Hans' # 使用中文
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_TZ = False # 保持与旧项目一致不使用UTC时区
# Static files (CSS, JavaScript, Images)
STATIC_URL = 'static/'
# 开发环境静态文件目录,可参照旧项目添加 MEDIA 配置
# MEDIA_URL = 'media/'
# MEDIA_ROOT = BASE_DIR / 'media'
# Default primary key field type
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
# ==================== 以下为第三方库及自定义配置 ====================
# settings.py
# 修改SIMPLE_JWT配置
SIMPLE_JWT = {
'ACCESS_TOKEN_LIFETIME': timedelta(days=36500),
'REFRESH_TOKEN_LIFETIME': timedelta(days=36500),
'ROTATE_REFRESH_TOKENS': False,
'BLACKLIST_AFTER_ROTATION': False,
'UPDATE_LAST_LOGIN': False,
'ALGORITHM': 'HS256',
'SIGNING_KEY': SECRET_KEY,
'VERIFYING_KEY': None,
'AUDIENCE': None,
'ISSUER': None,
'JWK_URL': None,
'LEEWAY': 0,
'AUTH_HEADER_TYPES': ('Bearer',),
'AUTH_HEADER_NAME': 'HTTP_AUTHORIZATION',
# 修改这里使用yonghuid而不是id
'USER_ID_FIELD': 'yonghuid',
'USER_ID_CLAIM': 'yonghuid',
'USER_AUTHENTICATION_RULE': 'rest_framework_simplejwt.authentication.default_user_authentication_rule',
'AUTH_TOKEN_CLASSES': ('rest_framework_simplejwt.tokens.AccessToken',),
'TOKEN_TYPE_CLAIM': 'token_type',
'TOKEN_USER_CLASS': 'rest_framework_simplejwt.models.TokenUser',
'JTI_CLAIM': 'jti',
}
# 添加自定义认证后端
AUTHENTICATION_BACKENDS = [
'django.contrib.auth.backends.ModelBackend',
]
# 必须指定用户模型即使它不继承AbstractBaseUser
AUTH_USER_MODEL = 'yonghu.UserMain'
# DRF配置也非常简单
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_simplejwt.authentication.JWTAuthentication',
),
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
),
'DEFAULT_THROTTLE_CLASSES': [
'rest_framework.throttling.AnonRateThrottle', # 匿名用户限制
'rest_framework.throttling.UserRateThrottle', # 登录用户限制
],
'DEFAULT_THROTTLE_RATES': {
'anon': '100/minute', # 匿名用户每分钟100次
'user': '1000/minute', # 登录用户每分钟1000次
},
}
# CORS settings
CORS_ALLOWED_ORIGINS = [
"http://localhost:8080", # 假设前端开发服务器地址
"http://127.0.0.1:8080",
"http://localhost:5174",
]
CORS_ALLOW_CREDENTIALS = True
CORS_ALLOW_METHODS = (
"GET",
"POST",
"PUT",
"PATCH",
"DELETE",
"OPTIONS",
)
CORS_ALLOW_HEADERS = [
"accept",
"accept-encoding",
"authorization",
"content-type",
"dnt",
"origin",
"user-agent",
"x-csrftoken",
"x-requested-with",
]
# 【待确认】自定义用户模型,你需要在 yonghu/models.py 中创建 class Yonghu
#AUTH_USER_MODEL = 'yonghu.Yonghu'
# ==================== 跨平台订单互通配置 ====================
# 接口认证令牌(双方约定,用于简单验证)
CROSS_PLATFORM_TOKEN = 'jdjdjshwjqk'
# 对方平台接口基础URL需根据实际部署修改
PARTNER_BASE_URL = 'https://partner.com/api'
# 对方平台各接口路径(可根据实际情况调整,但双方需保持一致)
PARTNER_SYNC_ORDER_URL = '/dingdan/partner_sync_order' # 接收派单
PARTNER_CHECK_CLAIM_URL = '/dingdan/partner_check_claim' # 抢单询问
PARTNER_NOTIFY_CLAIM_URL = '/dingdan/partner_notify_claim' # 抢单成功通知
PARTNER_REFUND_NOTIFY_URL = '/dingdan/partner_refund_notify' # 退款通知
# 我方代表对方发单的商家ID需在数据库中存在且具有商家扩展表
AGENT_SHANGJIA_ID = '9106027'
# 用于验证的会员ID根据业务约定
CROSS_PLATFORM_MEMBER_ID = 'vip_2025'
# 默认游戏类型ID当对方未传递时使用
CROSS_PLATFORM_GAME_TYPE_ID = 1
# 允许跨平台的商家ID列表白名单
CROSS_PLATFORM_WHITELIST = ['5438898']
# OSS配置
COS_SECRET_ID =''
COS_SECRET_KEY =''
COS_BUCKET = ''
COS_APPID = '' # 你的腾讯云APPIDjulebu-1361527063中的数字部分
COS_REGION = 'ap-shanghai'
COS_SCHEME = 'https' # 使用HTTPS
COS_DOMAIN = f'https://{COS_BUCKET}.cos.{COS_REGION}.myqcloud.com'
# settings.py - 在COS配置部分添加
#COS_APPID = '1361527063' # 你的腾讯云APPIDjulebu-1361527063中的数字部分
COS_STS_DURATION = 7200 # STS临时凭证有效期
# ==================== 业务相关配置 (值先空着,结构可保留) ====================
# 微信虚拟支付配置
VP_OFFER_ID = '你的offer_id' # 虚拟支付应用ID
VP_APPKEY = '你的现网AppKey' # 正式环境密钥
VP_APPKEY_SANDBOX = '你的沙箱AppKey' # 沙箱环境密钥
VP_ENV = 1 # 1=沙箱(测试), 0=正式(上线改这里)
# 微信小程序配置 (开发环境可先留空或使用测试号)
WEIXIN_APPID = '' # 你的小程序APPID
WEIXIN_SECRET = ''
WEIXIN_MCHID = '' # 商户号,支付功能需要
WEIXIN_SHANGHUMIYAO = ''# 商户密钥,支付功能需要
# 🆕【新增】服务号配置
WEIXIN_OFFICIAL_APPID = '' # 服务号APPID
WEIXIN_OFFICIAL_SECRET = '填写你的服务号APPSECRET' # 服务号SECRET
WEIXIN_OFFICIAL_TOKEN = '填写你的Token' # 服务号Token
WEIXIN_OFFICIAL_ENCODING_AES_KEY = '填写你的EncodingAESKey' # 可选
WEIXIN_TEMPLATE_ID = '' # 模板ID
# 罚款缴纳微信支付配置
FAKUAN_PAY_DESCRIPTION = '罚款缴纳' # 支付描述
FAKUAN_PAY_NOTIFY_URL = 'https://www.abas.asia/hqhd/yonghu/fk_huitiao' # 微信支付回调地址(根据实际域名调整)
# 🆕【新增】模板消息配置
WEIXIN_TEMPLATE_MAX_PER_MINUTE = 950 # 每分钟最大发送量留50缓冲
WEIXIN_TEMPLATE_BATCH_SIZE = 100 # 每批发送数量
WEIXIN_NOTIFY_URL = 'http:api' # 支付回调地址http://你的域名/api/pay/callback/
# settings.py 或相应配置文件中
WEIXIN_PAY_DESCRIPTION = "网络服务" # 支付描述
# 押金充值相关配置
YAJIN_PAY_DESCRIPTION = "打手押金充值" # 押金支付描述
YAJIN_PAY_NOTIFY_URL = "http://你的域名/api/shangpin/yajinhuitiao/" # 押金支付回调地址
# 积分充值相关配置
JIFEN_PAY_DESCRIPTION = "打手积分补充" # 积分支付描述
JIFEN_PAY_NOTIFY_URL = "http://你的域名/api/shangpin/jifenhuitiao/" # 积分支付回调地址
# 会员充值相关配置
HUIYUAN_PAY_DESCRIPTION = "打手会员充值" # 会员支付描述
HUIYUAN_PAY_NOTIFY_URL = "http://你的域名/api/shangpin/huiyuanhuitiao/" # 会员支付回调地址
# 考核支付配置
KAOHE_PAY_DESCRIPTION = '考核金牌-缴纳考核费'
KAOHE_PAY_NOTIFY_URL = 'https://您的域名/hqhd/yonghu/kh_huitiao' # 替换为实际回调地址
KAOHE_PAY_DEFAULT_FEE = 5.00 # 未配置费用时的默认金额
# settings.py
SHANGJIA_CZ_PREFIX = "CzSJ" # 商家充值订单前缀
SHANGJIA_CZ_PAY_DESCRIPTION = "阿龙电竞-商家余额充值"
SHANGJIA_CZ_PAY_NOTIFY_URL = "https://yourdomain.com/shangpin/sjhuitiao"
SHANGJIA_CZ_MIN_AMOUNT = 1
SHANGJIA_CZ_MAX_AMOUNT = 10000
# 订单ID前缀配置
ORDER_PREFIX = {
'yajin': 'CzYJ', # 押金订单前缀
'jifen': 'CzJF', # 积分订单前缀
'huiyuan': 'CzHY', # 会员订单前缀
}
# 腾讯云即时通讯 (IM) - 开发环境可暂不配置
TENCENT_IM_CONFIG = {
'SDK_APP_ID': 0, # 整数
'SECRET_KEY': '',
}
# 阿里云短信 - 开发环境可暂不配置
ALIYUN_SMS_CONFIG = {
'ACCESS_KEY_ID': '',
'ACCESS_KEY_SECRET': '',
'SIGN_NAME': '',
'TEMPLATE_CODE': '',
'REGION_ID': 'cn-hangzhou',
}
# HashID (用于加密ID旧项目有新项目需要吗)
# HASHID_FIELD_SALT = 'a_long_dianjing_2025_salt' # 【待确认】请设置你的盐值
# settings.py 尾部添加
# settings.py
# settings.py
# settings.py 中添加配置
GOEASY_APPKEY = '' # 你的AppKey
GOEASY_SECRET = '' # 从GoEasy控制台获取
GOEASY_REST_URL = 'https://rest-hz.goeasy.io/v2/im/message' # 正式环境
# settings.py
# H5静态页面域名配置
H5_DOMAIN = 'https://h5.yourdomain.com' # 生产环境
# H5_DOMAIN = 'https://test-h5.yourdomain.com' # 测试环境
# 特殊管事ID列表yonghuid这些管事的首次分红金额从 UserGuanshi.fenhong_yici 字段获取
SPECIAL_GUANSHI_IDS = [
'1000001',
'1000002',
# ... 按需添加
]
# ========== 管理员批量链接白名单 ==========
ADMIN_BATCH_LINK_ALLOWED_PHONES = [
'13800138000',
'13912345678',
]
BATCH_LINK_DEFAULT_COUNT = 100
BATCH_LINK_MAX_COUNT = 200
# settings.py
# settings.py
WECHAT_PAY_V3_CONFIG = {
'MCHID': '', # 商户号
'APPID': '', # 小程序APPID
'API_V3_KEY': '', # APIv3密钥32字节
'PRIVATE_KEY_PATH': '/opt/1panel/apps/openresty/openresty/www/sites/119.28.221.247.1199/huizhifuzhengshu/apiclient_key.pem', # 商户私钥文件路径
'CERT_SERIAL_NO': '', # 商户证书序列号
'PLATFORM_CERT_DIR': '/opt/1panel/apps/openresty/openresty/www/sites/119.28.221.247.1199/huizhifuzhengshu/pub_key.pem', # 存放微信平台证书公钥的目录(文件名:序列号.pem
'NOTIFY_URL': 'https://ios808.top/hqhd/yonghu/tixiancallback', # 回调地址
'TRANSFER_SCENE_ID': '', # 替换为你的实际场景ID
}
CROSS_PLATFORM_SYNC_TOKEN = 'xK9mP2vL8qW5rT7y'
# 提现收款链路日志(输出到 stderrgunicorn/1panel 可抓取)
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'tixian_shenhe_console': {
'class': 'logging.StreamHandler',
'formatter': 'verbose',
},
},
'formatters': {
'verbose': {
'format': '[{asctime}] {levelname} {name} {message}',
'style': '{',
},
},
'loggers': {
'yonghu.tixian_shenhe': {
'handlers': ['tixian_shenhe_console'],
'level': 'INFO',
'propagate': False,
},
},
}