Django-settings

必要包的导入

import datetime
import os  # 操作系统ubuntu模块
import sys  # python模块

项目根目录的配置

os.path.abspath():拿到当前文件的绝对路径 os.path.dirname():拿到其所属目录

#settings文件中
​
# __file__ ===> 当前文件名
BASE_DIR = os.path.dirname(os.path.dirname(os.path.absname(__file__)))

指定应用的导包路径

sys.path是一个Python搜索模块的路径的列表。当你导入一个模块时,Python会按照sys.path中的路径顺序来搜索模块。通过将路径插入到列表的开头(索引为0),你可以确保这个路径的优先级最高,即在搜索模块时首先检查这个路径。

sys.path.insert(0,os.path.join(BASE_DIR,'apps'))
# 0表示将路径插入到'sys.path'列表的最前面,即作为第一个元素插入
​

SECRET_KEY

SECRET_KEY是Django中的一个重要设置,用于加密签名和安全目的。它用于各种安全相关的操作,比如生成安全令牌、签名cookie和防止数据篡改。

在生产环境中尤其重要的是保持SECRET_KEY的机密性,因为一个暴露或被攻击的密钥可能导致各种安全漏洞和攻击。

DEBUG模式

在部署到服务器上后记得关闭

允许的域名和IP

ALLOWED_HOSTS = [
    'www.qfzwy.cn',
    '127.0.0.1',
    '*'
]

注册App

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
​
    # 完整导包路径
    # 'meiduo_mall.apps.users.apps.UsersConfig',
    'users.apps.UsersConfig',
    'verifycations.apps.VerifycationsConfig',
    'contents.apps.ContentsConfig',
    'oauth.apps.OauthConfig',
    'areas.apps.AreasConfig',
    'goods.apps.GoodsConfig',
    'carts.apps.CartsConfig',
    'orders.apps.OrdersConfig',
    'payments.apps.PaymentsConfig',
    'meiduo_admin.apps.MeiduoAdminConfig',
    'corsheaders',  # 跨域模块
​
    # 'haystack',
    'django_crontab',  # 定时任务
]

中间件

部署后注释csrf即可

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变量被设置为'niubo_drf.urls',它是一个字符串,表示包含niubo_drf项目的URL配置的Python模块。

通常情况下,这个值指向一个Python模块,其中定义了urlpatterns变量。urlpatterns变量是一个列表,其中包含将特定URL映射到Django应用程序中的相应视图或函数的URL模式。

ROOT_URLCONF = 'niubo_drf.urls'

如果模式字符串中包含了反斜杠\,为了保持它们的原始意义,应该在模式字符串前面加上r前缀,表示该字符串是原始字符串。

^开头,表示它们要匹配以特定路径开头的URL。例如,r'^admin/'将匹配以admin/开头的URL,r'^'将匹配任何URL路径。

from django.conf.urls import url, include
from django.contrib import admin
​
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^', include('users.urls')),
    url('^', include('verifycations.urls')),
    url('^', include('contents.urls')),
    url('^', include('oauth.urls')),
    url('^', include('areas.urls')),
    url('^', include('goods.urls')),
    # url(r'^search/', include('haystack.urls')),
    url('^', include('carts.urls')),
    url('^', include('orders.urls')),
    url('^', include('payments.urls')),
    url('^niubo_admin/', include('niubo_admin.urls')),
]
​

模板路径

前后端分离好像可以忽略

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.jinja2.Jinja2',
        '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',
            ],
            # 补充Jinja2模板引擎环境
            'environment': 'meiduo_mall.utils.jinja2_env.jinja2_environment',
        },
    },
]

wsgi路径

WSGI_APPLICATION = 'niubo_drf.wsgi.application'

数据库配置

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',  # 数据库引擎
        'HOST': '*.*.*.*',  # 数据库主机
        'PORT': 3306,  # 数据库端口
        'USER': '****',  # 数据库用户名
        'PASSWORD': '****',  # 数据库用户密码
        'NAME': 'niuboapp'  # 数据库名字
    },
}

密码验证器

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':验证密码是否包含数字字符。

通过配置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',
    },
]

国际化和时区配置

  1. LANGUAGE_CODE:表示当前使用的语言代码。在你提供的代码中,LANGUAGE_CODE被设置为 'en-us',表示使用英语(美国)作为默认语言。

  2. TIME_ZONE:表示当前使用的时区。在你提供的代码中,TIME_ZONE被设置为 'UTC',表示使用协调世界时(Coordinated Universal Time)作为默认时区。

  3. USE_I18N:表示是否启用国际化(Internationalization)。如果设置为 True,Django将支持多语言功能,包括翻译文本、日期格式等。

  4. USE_L10N:表示是否启用本地化(Localization)。如果设置为 True,Django将使用本地化格式,例如数字和日期的本地化格式。

  5. USE_TZ:表示是否启用时区。如果设置为 True,Django将支持时区功能,包括日期和时间的时区转换。

静态文件配置

  1. STATIC_URL:表示静态文件的URL路径。在你的代码中,STATIC_URL被设置为 '/static/',意味着静态文件可以通过 http://yourdomain.com/static/ 这样的URL路径来访问。

  2. STATICFILES_DIRS:表示静态文件的磁盘路径。在你的代码中,STATICFILES_DIRS 是一个列表,其中包含一个路径,即 os.path.join(BASE_DIR, 'static')。这表示静态文件存储在项目根目录下的 static 文件夹中。

# 静态文件访问的url路径
STATIC_URL = '/static/'
# 静态文件的磁盘路径
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]

缓存

# 缓存
CACHES = {
    "default": {  # 默认
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/0",  # 可改:ip、port、db
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    },
    "session": {  # session
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/1",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    }
}

session

在Django中,会话(session)是一种用于在不同请求之间存储数据的机制。会话可以存储用户的认证状态、用户偏好设置、购物车内容等信息。

在你提供的代码中,有两个与会话保存方案相关的配置设置:

  1. SESSION_ENGINE:表示会话引擎的选择。在你的代码中,SESSION_ENGINE 被设置为 "django.contrib.sessions.backends.cache",表示会话数据将使用缓存作为存储后端。

  2. SESSION_CACHE_ALIAS:表示缓存别名。在你的代码中,SESSION_CACHE_ALIAS 被设置为 "session",表示使用名为 "session" 的缓存后端来存储会话数据。

# 指定session的保存方案
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "session"

日志

  1. 'version': 1: 指定日志配置的版本号。

  2. 'disable_existing_loggers': False: 指定是否禁用已经存在的日志器。设置为False表示不禁用。

  3. 'formatters': 配置日志信息显示的格式。

    • 'verbose': 详细格式,包括日志级别、时间、模块名、行号和消息。

    • 'simple': 简单格式,包括日志级别、模块名、行号和消息。

  4. 'filters': 配置日志过滤器。

    • 'require_debug_true': 通过django.utils.log.RequireDebugTrue过滤器,仅在Django的调试模式下输出日志。

  5. 'handlers': 配置日志处理方法。

    • 'console': 向终端中输出日志。

      • 'level': 'INFO': 指定输出的日志级别为INFO。

      • 'filters': ['require_debug_true']: 应用过滤器,仅在Django的调试模式下输出日志。

      • 'class': 'logging.StreamHandler': 指定使用StreamHandler将日志输出到终端。

      • 'formatter': 'simple': 指定使用简单格式的日志信息。

    • 'file': 向文件中输出日志。

      • 'level': 'INFO': 指定输出的日志级别为INFO。

      • 'class': 'logging.handlers.RotatingFileHandler': 指定使用RotatingFileHandler将日志输出到文件。

      • 'filename': os.path.join(os.path.dirname(BASE_DIR), 'logs/meiduo.log'): 指定日志文件的位置。

      • 'maxBytes': 300 * 1024 * 1024: 指定日志文件的最大大小为300MB。

      • 'backupCount': 10: 指定保留的日志文件数量为10个。

      • 'formatter': 'verbose': 指定使用详细格式的日志信息。

  6. 'loggers': 配置日志器。

    • 'django': 定义了一个名为django的日志器。
      • 'handlers': ['console', 'file']: 指定将日志同时输出到终端和文件中。

      • 'propagate': True: 指定是否继续传递日志信息。

      • 'level': 'INFO': 指定日志器接收的最低日志级别为INFO。

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在debug模式下才输出日志
            '()': 'django.utils.log.RequireDebugTrue',
        },
    },
    'handlers': {  # 日志处理方法
        'console': {  # 向终端中输出日志
            'level': 'INFO',
            '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': {  # 定义了一个名为django的日志器
            'handlers': ['console', 'file'],  # 可以同时向终端与文件中输出日志
            'propagate': True,  # 是否继续传递日志信息
            'level': 'INFO',  # 日志器接收的最低日志级别
        },
    }
}

指定用户模型类

# 指定用户模型类
AUTH_USER_MODEL = 'users.User'  # 应用名称.模型类名称

认证后端

AUTHENTICATION_BACKENDS = [
    'meiduo_mall.utils.authenticate.NiuboModelBackend',
    'django.contrib.auth.backends.ModelBackend',  # 默认的认证后端
]
​

指定登录视图URL地址

# 指定登录视图URL地址
LOGIN_URL = '/login/'

JWT配置

# JWt配置
JWT_AUTH = {
    # 指定有效期
    'JWT_EXPIRATION_DELTA': datetime.timedelta(days=1),
    # 指定返回结果方法
    'JWT_RESPONSE_PAYLOAD_HANDLER':
        'meiduo_admin.utils.jwt_response_payload_handler',
}
 
posted @ 2023-06-21 15:45  qfzwy  阅读(44)  评论(0)    收藏  举报