"""
Django settings for VotingManagement project.

Generated by 'django-admin startproject' using Django 3.0.2.

For more information on this file, see
https://docs.djangoproject.com/en/3.0/topics/settings/

For the full list of settings and their values, see
https://docs.djangoproject.com/en/3.0/ref/settings/
"""

import os
from datetime import timedelta
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
#这个变量代表的是整个项目的根路径
#os.path.abspath()这个函数可以获取文件的路径，而且是真实路径，而不是调用者的路径
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))


# 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 = 'lso-8c6x8w2*%s0yp3cw)w@4@r$f_xd70aa^g&j_o331y#-l8a'

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

ALLOWED_HOSTS = ["*"]
# ALLOWED_HOSTS 允许你设置哪些域名可以访问，即使在 Apache 或 Nginx 等中绑定了，这里不允许的话，也是不能访问的。
# 当 DEBUG=False 时，这个为必填项，如果不想输入，可以用 ALLOW_HOSTS = [‘*‘] 来允许所有的。

# Application definition
# 如果我们要创建一个App，要把App注册到这个里面。
# 新建的 app 如果不加到 INSTALL_APPS 中的话，django 就不能自动找到app中的模板文件(app-name/templates/下的文件)
# 和静态文件(app-name/static/中的文件)
INSTALLED_APPS = [
    'simpleui',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'rest_framework',
    'rest_framework_simplejwt',
    'drf_yasg',

    'backend.apps.BackendConfig',
]
# 接下来是高级的中间件，一般中小型项目对这个的使用率不高。
# 可以理解为一个层级更底层的App，消息在到达views之前会先通过中间件。可以做一些低层次的消息转发处理。比如实现一个filter。
MIDDLEWARE = [
    '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',
]


# 在这里指定根路由文件。Django当中的路由是一层一层的，但是总要有一个根路由来做总分配。这里就是设置根路由文件名称的。
ROOT_URLCONF = 'VotingManagement.urls'

# 关键点只有一个：DIRS
#
# 这个key的value是一个list，里面放的是所有templates的路径。
# 如果不配置，会默认的去每个注册了的App下的Templates路径里查找。如果配置了，就必须把每一个App都配全。不然找不到。
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        '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 = 'VotingManagement.wsgi.application'


# Database
# https://docs.djangoproject.com/en/3.0/ref/settings/#databases

DATABASES = {
    # 'default': {
    #     'ENGINE': 'django.db.backends.sqlite3',
    #     'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    # }

    #surface pro6本机数据库密码admin12345678
    #公司电脑密码12345678
    #root1 KTC_apply123

    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'votingmanagement',
        'USER': 'root',
        'PASSWORD': 'admin12345678',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }

}


# Password validation
# https://docs.djangoproject.com/en/3.0/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/3.0/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/3.0/howto/static-files/

STATIC_URL = '/static/'

#自定义的User
AUTH_USER_MODEL = 'backend.User'
# 可根据自己的使用情况，删除不需要的认证方式
# 使用全局配置的话，是每个接口都要求认证
REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',     #权限Permissions
    ),
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_simplejwt.authentication.JWTAuthentication',  # djangorestframework_simplejwt JWT认证
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.BasicAuthentication',
    )
}

#JWT认证系统
SIMPLE_JWT = {
    'ACCESS_TOKEN_LIFETIME': timedelta(minutes=5),
    'REFRESH_TOKEN_LIFETIME': timedelta(days=1),
    'ROTATE_REFRESH_TOKENS': False,
    'BLACKLIST_AFTER_ROTATION': True,

    'ALGORITHM': 'HS256',
    'SIGNING_KEY': 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),
}

#Simple UI设置
#默认主题
SIMPLEUI_DEFAULT_THEME = 'admin.lte.css'
#自定义SIMPLEUI的Logo
SIMPLEUI_LOGO = 'https://avatars2.githubusercontent.com/u/13655483?s=60&v=4'
#首页标题
SIMPLEUI_HOME_TITLE = '投票系统管理'
#首页图标
SIMPLEUI_HOME_ICON = 'fa fa-user'
#显示服务器信息
SIMPLEUI_HOME_INFO = True
#快速操作
SIMPLEUI_HOME_QUICK = True
#使用分析
SIMPLEUI_ANALYSIS = True