""" Django settings for meiduo_mall project. Generated by 'django-admin startproject' using Django 1.11.11. For more information on this file, see https://docs.djangoproject.com/en/1.11/topics/settings/ For the full list of settings and their values, see https://docs.djangoproject.com/en/1.11/ref/settings/ """ import os import sys import datetime # Build paths inside the project like this: os.path.join(BASE_DIR, ...) BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # sys.path保存了python解释器的导包路径 sys.path.insert(0, os.path.join(BASE_DIR, 'apps')) # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/1.11/howto/deployment/checklist/ # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = '&+q5st03g9)81))xki7gyznnu_3f$15ovxwq@i2h0(cinq3v$4' # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True ALLOWED_HOSTS = ['api.meiduo.site', '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', 'rest_framework', 'corsheaders', 'ckeditor', # 富文本编辑器 'ckeditor_uploader', # 富文本编辑器上传图片模块 'django_crontab', # 定时任务 'haystack', 'xadmin', 'crispy_forms', 'reversion', 'users.apps.UsersConfig', 'verifications.apps.VerificationsConfig', 'oauth.apps.OauthConfig', 'areas.apps.AreasConfig', 'goods.apps.GoodsConfig', 'contents.apps.ContentsConfig', 'carts.apps.CartsConfig', 'orders.apps.OrdersConfig', 'payment.apps.PaymentConfig', ] MIDDLEWARE = [ 'corsheaders.middleware.CorsMiddleware', 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] ROOT_URLCONF = 'meiduo_mall.urls' TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')], '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', ], }, }, ] WSGI_APPLICATION = 'meiduo_mall.wsgi.application' # Database # https://docs.djangoproject.com/en/1.11/ref/settings/#databases DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'HOST': '10.211.55.5', # 数据库主机 'PORT': 3306, # 数据库端口 'USER': 'meiduo_27', # 数据库用户名 'PASSWORD': 'meiduo', # 数据库用户密码 'NAME': 'meiduo_27' # 数据库名字 }, 'slave': { 'ENGINE': 'django.db.backends.mysql', 'HOST': '10.211.55.5', # 数据库主机 'PORT': 8306, # 数据库端口 'USER': 'root', # 数据库用户名 'PASSWORD': 'mysql', # 数据库用户密码 'NAME': 'meiduo_27' # 数据库名字 }, } # 数据库路由 DATABASE_ROUTERS = ['meiduo_mall.utils.db_routers.MasterSlaveDBRouter'] # Redis CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://10.211.55.5:6379/0", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", } }, "session": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://10.211.55.5:6379/1", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", } }, "verify_codes": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://10.211.55.5:6379/2", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", } }, "history": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://10.211.55.5:6379/3", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", } }, "cart": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://10.211.55.5:6379/4", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", } }, } SESSION_ENGINE = "django.contrib.sessions.backends.cache" SESSION_CACHE_ALIAS = "session" # Password validation # https://docs.djangoproject.com/en/1.11/ref/settings/#auth-password-validators 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 # https://docs.djangoproject.com/en/1.11/topics/i18n/ LANGUAGE_CODE = 'zh-hans' TIME_ZONE = 'Asia/Shanghai' USE_I18N = True USE_L10N = True USE_TZ = True # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/1.11/howto/static-files/ STATIC_URL = '/static/' # 日志处理 LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'formatters': { 'verbose': { 'format': '%(levelname)s %(asctime)s %(module)s %(lineno)d %(message)s' }, 'simple': { 'format': '%(levelname)s %(module)s %(lineno)d %(message)s' }, }, 'filters': { 'require_debug_true': { '()': 'django.utils.log.RequireDebugTrue', }, }, 'handlers': { 'console': { 'level': 'DEBUG', 'filters': ['require_debug_true'], 'class': 'logging.StreamHandler', 'formatter': 'simple' }, 'file': { 'level': 'INFO', 'class': 'logging.handlers.RotatingFileHandler', 'filename': os.path.join(os.path.dirname(BASE_DIR), "logs/meiduo.log"), 'maxBytes': 300 * 1024 * 1024, 'backupCount': 10, 'formatter': 'verbose' }, }, 'loggers': { 'django': { 'handlers': ['console', 'file'], 'propagate': True, }, } } # REST配置 REST_FRAMEWORK = { # 异常处理 'EXCEPTION_HANDLER': 'meiduo_mall.utils.exceptions.exception_handler', # 认证机制后端 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_framework_jwt.authentication.JSONWebTokenAuthentication', 'rest_framework.authentication.SessionAuthentication', 'rest_framework.authentication.BasicAuthentication', ), # 分页 'DEFAULT_PAGINATION_CLASS': 'meiduo_mall.utils.paginations.StandardPageNumPagination', } JWT_AUTH = { # JWT 的有效期 'JWT_EXPIRATION_DELTA': datetime.timedelta(days=1), 'JWT_RESPONSE_PAYLOAD_HANDLER': 'users.utils.jwt_response_payload_handler', } # Django认证系统使用的模型类 AUTH_USER_MODEL = 'users.User' # Django的认证后端方法 AUTHENTICATION_BACKENDS = [ 'users.utils.UsernameMobileAuthBackend', ] CORS_ORIGIN_WHITELIST = ( '127.0.0.1:8080', 'localhost:8080', 'www.meiduo.site:8080', 'api.meiduo.site:8000', ) CORS_ALLOW_CREDENTIALS = True # 允许携带cookie # 用于QQ登录的配置信息 QQ_APP_ID = '101474184' QQ_APP_KEY = 'c6ce949e04e12ecc909ae6a8b09b637c' QQ_REDIRECT_URL = 'http://www.meiduo.site:8080/oauth_callback.html' QQ_STATE = '/' # Email EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST = 'smtp.163.com' EMAIL_PORT = 25 EMAIL_HOST_USER = '[email protected]' EMAIL_HOST_PASSWORD = 'meiduo123' EMAIL_FROM = '美多商城<[email protected]>' # DRF扩展 REST_FRAMEWORK_EXTENSIONS = { # 缓存时间 'DEFAULT_CACHE_RESPONSE_TIMEOUT': 60 * 60, # 缓存存储 'DEFAULT_USE_CACHE': 'default', } # FastDFS FDFS_CLIENT_CONF = os.path.join(BASE_DIR, 'utils/fastdfs/client.conf') FDFS_BASE_URL = 'http://10.211.55.5:8888/' # django文件存储 DEFAULT_FILE_STORAGE = 'meiduo_mall.utils.fastdfs.storage.FastDFSStorage' # 富文本编辑器ckeditor配置 CKEDITOR_CONFIGS = { 'default': { 'toolbar': 'full', # 工具条功能 'height': 300, # 编辑器高度 # 'width': 300, # 编辑器宽 }, } CKEDITOR_UPLOAD_PATH = '' # 上传图片保存路径,使用了FastDFS,所以此处设为'' # 生成的静态html文件保存目录 GENERATED_STATIC_HTML_FILES_DIR = os.path.join(os.path.dirname(os.path.dirname(BASE_DIR)), 'front_end_pc') # 定时任务 CRONJOBS = [ # 每5分钟执行一次生成主页静态文件 ('*/5 * * * *', 'contents.crons.generate_static_index_html', '>> /Users/delron/Desktop/meiduo/meiduo_mall/logs/crontab.log') ] # 解决crontab中文问题 CRONTAB_COMMAND_PREFIX = 'LANG_ALL=zh_cn.UTF-8' # Haystack HAYSTACK_CONNECTIONS = { 'default': { 'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine', 'URL': 'http://10.211.55.5:9200/', # 此处为elasticsearch运行的服务器ip地址,端口号固定为9200 'INDEX_NAME': 'meiduo', # 指定elasticsearch建立的索引库的名称 }, } # 当添加、修改、删除数据时,自动生成索引 HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor' # 支付宝 ALIPAY_APPID = 2016081600258081 ALIPAY_DEBUG = True ALIPAY_GATEWAY_URL = 'https://openapi.alipaydev.com/gateway.do' # 收集静态文件的目录 STATIC_ROOT = os.path.join(os.path.dirname(os.path.dirname(BASE_DIR)), 'front_end_pc/static')
更多配置见https://docs.djangoproject.com/en/1.11/ref/settings/
"""Django settings for meiduo_mall project.
Generated by 'django-admin startproject' using Django 1.11.11.
For more information on this file, seehttps://docs.djangoproject.com/en/1.11/topics/settings/
For the full list of settings and their values, seehttps://docs.djangoproject.com/en/1.11/ref/settings/"""
import osimport sysimport datetime
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# sys.path保存了python解释器的导包路径sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))
# Quick-start development settings - unsuitable for production# See https://docs.djangoproject.com/en/1.11/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!SECRET_KEY = '&+q5st03g9)81))xki7gyznnu_3f$15ovxwq@i2h0(cinq3v$4'
# SECURITY WARNING: don't run with debug turned on in production!DEBUG = True
ALLOWED_HOSTS = ['api.meiduo.site', '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', 'rest_framework', 'corsheaders', 'ckeditor', # 富文本编辑器 'ckeditor_uploader', # 富文本编辑器上传图片模块 'django_crontab', # 定时任务 'haystack', 'xadmin', 'crispy_forms', 'reversion', 'users.apps.UsersConfig', 'verifications.apps.VerificationsConfig', 'oauth.apps.OauthConfig', 'areas.apps.AreasConfig', 'goods.apps.GoodsConfig', 'contents.apps.ContentsConfig', 'carts.apps.CartsConfig', 'orders.apps.OrdersConfig', 'payment.apps.PaymentConfig',]
MIDDLEWARE = [ 'corsheaders.middleware.CorsMiddleware', 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware',]
ROOT_URLCONF = 'meiduo_mall.urls'
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')], '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', ], }, },]
WSGI_APPLICATION = 'meiduo_mall.wsgi.application'
# Database# https://docs.djangoproject.com/en/1.11/ref/settings/#databases
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'HOST': '10.211.55.5', # 数据库主机 'PORT': 3306, # 数据库端口 'USER': 'meiduo_27', # 数据库用户名 'PASSWORD': 'meiduo', # 数据库用户密码 'NAME': 'meiduo_27' # 数据库名字 }, 'slave': { 'ENGINE': 'django.db.backends.mysql', 'HOST': '10.211.55.5', # 数据库主机 'PORT': 8306, # 数据库端口 'USER': 'root', # 数据库用户名 'PASSWORD': 'mysql', # 数据库用户密码 'NAME': 'meiduo_27' # 数据库名字 },}
# 数据库路由DATABASE_ROUTERS = ['meiduo_mall.utils.db_routers.MasterSlaveDBRouter']
# RedisCACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://10.211.55.5:6379/0", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", } }, "session": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://10.211.55.5:6379/1", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", } }, "verify_codes": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://10.211.55.5:6379/2", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", } }, "history": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://10.211.55.5:6379/3", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", } }, "cart": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://10.211.55.5:6379/4", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", } },}SESSION_ENGINE = "django.contrib.sessions.backends.cache"SESSION_CACHE_ALIAS = "session"
# Password validation# https://docs.djangoproject.com/en/1.11/ref/settings/#auth-password-validators
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# https://docs.djangoproject.com/en/1.11/topics/i18n/
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
USE_TZ = True
# Static files (CSS, JavaScript, Images)# https://docs.djangoproject.com/en/1.11/howto/static-files/
STATIC_URL = '/static/'
# 日志处理LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'formatters': { 'verbose': { 'format': '%(levelname)s %(asctime)s %(module)s %(lineno)d %(message)s' }, 'simple': { 'format': '%(levelname)s %(module)s %(lineno)d %(message)s' }, }, 'filters': { 'require_debug_true': { '()': 'django.utils.log.RequireDebugTrue', }, }, 'handlers': { 'console': { 'level': 'DEBUG', 'filters': ['require_debug_true'], 'class': 'logging.StreamHandler', 'formatter': 'simple' }, 'file': { 'level': 'INFO', 'class': 'logging.handlers.RotatingFileHandler', 'filename': os.path.join(os.path.dirname(BASE_DIR), "logs/meiduo.log"), 'maxBytes': 300 * 1024 * 1024, 'backupCount': 10, 'formatter': 'verbose' }, }, 'loggers': { 'django': { 'handlers': ['console', 'file'], 'propagate': True, }, }}
# REST配置REST_FRAMEWORK = { # 异常处理 'EXCEPTION_HANDLER': 'meiduo_mall.utils.exceptions.exception_handler',
# 认证机制后端 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_framework_jwt.authentication.JSONWebTokenAuthentication', 'rest_framework.authentication.SessionAuthentication', 'rest_framework.authentication.BasicAuthentication', ),
# 分页 'DEFAULT_PAGINATION_CLASS': 'meiduo_mall.utils.paginations.StandardPageNumPagination',}
JWT_AUTH = { # JWT 的有效期 'JWT_EXPIRATION_DELTA': datetime.timedelta(days=1), 'JWT_RESPONSE_PAYLOAD_HANDLER': 'users.utils.jwt_response_payload_handler',}
# Django认证系统使用的模型类AUTH_USER_MODEL = 'users.User'
# Django的认证后端方法AUTHENTICATION_BACKENDS = [ 'users.utils.UsernameMobileAuthBackend',]
CORS_ORIGIN_WHITELIST = ( '127.0.0.1:8080', 'localhost:8080', 'www.meiduo.site:8080', 'api.meiduo.site:8000',)CORS_ALLOW_CREDENTIALS = True # 允许携带cookie
# 用于QQ登录的配置信息QQ_APP_ID = '101474184'QQ_APP_KEY = 'c6ce949e04e12ecc909ae6a8b09b637c'QQ_REDIRECT_URL = 'http://www.meiduo.site:8080/oauth_callback.html'
QQ_STATE = '/'
# EmailEMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'EMAIL_HOST = 'smtp.163.com'EMAIL_PORT = 25EMAIL_HOST_USER = '[email protected]'EMAIL_HOST_PASSWORD = 'meiduo123'EMAIL_FROM = '美多商城<[email protected]>'
# DRF扩展REST_FRAMEWORK_EXTENSIONS = { # 缓存时间 'DEFAULT_CACHE_RESPONSE_TIMEOUT': 60 * 60, # 缓存存储 'DEFAULT_USE_CACHE': 'default',}
# FastDFSFDFS_CLIENT_CONF = os.path.join(BASE_DIR, 'utils/fastdfs/client.conf')FDFS_BASE_URL = 'http://10.211.55.5:8888/'
# django文件存储DEFAULT_FILE_STORAGE = 'meiduo_mall.utils.fastdfs.storage.FastDFSStorage'
# 富文本编辑器ckeditor配置CKEDITOR_CONFIGS = { 'default': { 'toolbar': 'full', # 工具条功能 'height': 300, # 编辑器高度 # 'width': 300, # 编辑器宽 },}CKEDITOR_UPLOAD_PATH = '' # 上传图片保存路径,使用了FastDFS,所以此处设为''
# 生成的静态html文件保存目录GENERATED_STATIC_HTML_FILES_DIR = os.path.join(os.path.dirname(os.path.dirname(BASE_DIR)), 'front_end_pc')
# 定时任务CRONJOBS = [ # 每5分钟执行一次生成主页静态文件 ('*/5 * * * *', 'contents.crons.generate_static_index_html', '>> /Users/delron/Desktop/meiduo/meiduo_mall/logs/crontab.log')]
# 解决crontab中文问题CRONTAB_COMMAND_PREFIX = 'LANG_ALL=zh_cn.UTF-8'
# HaystackHAYSTACK_CONNECTIONS = { 'default': { 'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine', 'URL': 'http://10.211.55.5:9200/', # 此处为elasticsearch运行的服务器ip地址,端口号固定为9200 'INDEX_NAME': 'meiduo', # 指定elasticsearch建立的索引库的名称 },}
# 当添加、修改、删除数据时,自动生成索引HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'
# 支付宝ALIPAY_APPID = 2016081600258081ALIPAY_DEBUG = TrueALIPAY_GATEWAY_URL = 'https://openapi.alipaydev.com/gateway.do'
# 收集静态文件的目录STATIC_ROOT = os.path.join(os.path.dirname(os.path.dirname(BASE_DIR)), 'front_end_pc/static')