""" Django settings for zendao_django project. Generated by 'django-admin startproject' using Django 2.2.14. For more information on this file, see https://docs.djangoproject.com/en/2.2/topics/settings/ For the full list of settings and their values, see https://docs.djangoproject.com/en/2.2/ref/settings/ """ import os # Build paths inside the project like this: os.path.join(BASE_DIR, ...) import sys import time BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.insert(0, os.path.join(BASE_DIR, 'apps')) # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/2.2/howto/deployment/checklist/ # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = 's*v^-)9z$ul0hkgi*$(coyo)(!(zhl+)@o3utd08nh7f)0dubn' # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True ALLOWED_HOSTS = ["*"] # Application definition INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework_swagger', 'rest_framework', 'apps.zmobile', 'apps.users', ] 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', ] ROOT_URLCONF = 'zendao_django.urls' TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [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 = 'zendao_django.wsgi.application' # Database # https://docs.djangoproject.com/en/2.2/ref/settings/#databases DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'ZenDao', 'USER': 'root', 'PASSWORD': '', 'PORT': '3306', 'HOST': '192.168.5.36', } } # Password validation # https://docs.djangoproject.com/en/2.2/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', }, ] REST_FRAMEWORK = { # 文档报错: AttributeError: ‘AutoSchema’ object has no attribute ‘get_link’ # 用下面的设置可以解决 'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.AutoSchema', # 默认设置是: # 'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.openapi.AutoSchema', # 异常处理器 # 'EXCEPTION_HANDLER': 'user.utils.exception_handler', # Base API policies 'DEFAULT_RENDERER_CLASSES': [ 'rest_framework.renderers.JSONRenderer', 'rest_framework.renderers.BrowsableAPIRenderer', ], 'DEFAULT_PARSER_CLASSES': [ 'rest_framework.parsers.JSONParser', 'rest_framework.parsers.FormParser', 'rest_framework.parsers.MultiPartParser' ], # 1.认证器(全局) 'DEFAULT_AUTHENTICATION_CLASSES': [ 'rest_framework.authentication.SessionAuthentication', # 使用session时的认证器 'rest_framework.authentication.BasicAuthentication' # 提交表单时的认证器 ], # 下面这一行表示接口文档的访问权限, AllowAny不做权限限制. 'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.AllowAny',), # 'PAGE_SIZE': 10, 'PAGINATE_BY': 10, 'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.AutoSchema', # 2.权限配置(全局): 顺序靠上的严格 # 'DEFAULT_PERMISSION_CLASSES': [ # # 'rest_framework.permissions.IsAdminUser', # 管理员可以访问 # # 'rest_framework.permissions.IsAuthenticated', # 认证用户可以访问 # # 'rest_framework.permissions.IsAuthenticatedOrReadOnly', # 认证用户可以访问, 否则只能读取 # # 'rest_framework.permissions.AllowAny', # 所有用户都可以访问 # ], # 3.限流(防爬虫) 'DEFAULT_THROTTLE_CLASSES': [ 'rest_framework.throttling.AnonRateThrottle', 'rest_framework.throttling.UserRateThrottle', ], # # 3.1限流策略 # 'DEFAULT_THROTTLE_RATES': { # 'user': '100/hour', # 认证用户每小时100次 # 'anon': '3/day', # 未认证用户每天能访问3次 # }, # # 'DEFAULT_CONTENT_NEGOTIATION_CLASS': 'rest_framework.negotiation.DefaultContentNegotiation', # 'DEFAULT_METADATA_CLASS': 'rest_framework.metadata.SimpleMetadata', # 'DEFAULT_VERSIONING_CLASS': None, # # # 4.分页(全局):全局分页器, 例如 省市区的数据自定义分页器, 不需要分页 # 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination', # # 每页返回数量 # 'PAGE_SIZE': 10, # 默认 None # # # 5.过滤器后端 # 'DEFAULT_FILTER_BACKENDS': [ # 'django_filters.rest_framework.DjangoFilterBackend', # # 'django_filters.rest_framework.backends.DjangoFilterBackend', 包路径有变化 # ], # # # 5.1过滤排序(全局):Filtering 过滤排序 # 'SEARCH_PARAM': 'search', # 'ORDERING_PARAM': 'ordering', # # 'NUM_PROXIES': None, # # # 6.版本控制:Versioning 接口版本控制 # 'DEFAULT_VERSION': None, # 'ALLOWED_VERSIONS': None, # 'VERSION_PARAM': 'version', # # # Authentication 认证 # # 未认证用户使用的用户类型 # 'UNAUTHENTICATED_USER': 'django.contrib.auth.models.AnonymousUser', # # 未认证用户使用的Token值 # 'UNAUTHENTICATED_TOKEN': None, # # # View configuration # 'VIEW_NAME_FUNCTION': 'rest_framework.views.get_view_name', # 'VIEW_DESCRIPTION_FUNCTION': 'rest_framework.views.get_view_description', # # 'NON_FIELD_ERRORS_KEY': 'non_field_errors', # # # Testing # 'TEST_REQUEST_RENDERER_CLASSES': [ # 'rest_framework.renderers.MultiPartRenderer', # 'rest_framework.renderers.JSONRenderer' # ], # 'TEST_REQUEST_DEFAULT_FORMAT': 'multipart', # # # Hyperlink settings # 'URL_FORMAT_OVERRIDE': 'format', # 'FORMAT_SUFFIX_KWARG': 'format', # 'URL_FIELD_NAME': 'url', # # # Encoding # 'UNICODE_JSON': True, # 'COMPACT_JSON': True, # 'STRICT_JSON': True, # 'COERCE_DECIMAL_TO_STRING': True, # 'UPLOADED_FILES_USE_URL': True, # # # Browseable API # 'HTML_SELECT_CUTOFF': 1000, # 'HTML_SELECT_CUTOFF_TEXT': "More than {count} items...", # # # Schemas # 'SCHEMA_COERCE_PATH_PK': True, # 'SCHEMA_COERCE_METHOD_NAMES': { # 'retrieve': 'read', # 'destroy': 'delete' # }, } # swagger 配置项 SWAGGER_SETTINGS = { # 基础样式 'SECURITY_DEFINITIONS': { "basic": { 'type': 'basic' } }, # 如果需要登录才能够查看接口文档, 登录的链接使用restframework自带的. 'LOGIN_URL': 'rest_framework:login', 'LOGOUT_URL': 'rest_framework:logout', # 'DOC_EXPANSION': None, # 'SHOW_REQUEST_HEADERS':True, # 'USE_SESSION_AUTH': True, # 'DOC_EXPANSION': 'list', # 接口文档中方法列表以首字母升序排列 'APIS_SORTER': 'alpha', # 如果支持json提交, 则接口文档中包含json输入框 'JSON_EDITOR': True, # 方法列表字母排序 'OPERATIONS_SORTER': 'alpha', 'VALIDATOR_URL': None, } # Internationalization # https://docs.djangoproject.com/en/2.2/topics/i18n/ cur_path = os.path.dirname(os.path.realpath(__file__)) # log_path是存放日志的路径 log_path = os.path.join(os.path.dirname(cur_path), 'logs') if not os.path.exists(log_path): os.mkdir(log_path) # 如果不存在这个logs文件夹,就自动创建一个 # 日志配置 LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'formatters': { # 日志格式 'standard': { 'format': '[%(asctime)s] [%(filename)s:%(lineno)d] [%(module)s:%(funcName)s] ' '[%(levelname)s]- %(message)s'}, 'simple': { # 简单格式 'format': '%(levelname)s %(message)s' }, }, # 过滤 'filters': { "require_debug_true": {"()": "django.utils.log.RequireDebugTrue", }, }, # 定义具体处理日志的方式 'handlers': { # 输出错误日志 'err': { 'level': 'ERROR', 'class': 'logging.handlers.RotatingFileHandler', 'filename': os.path.join(log_path, 'err.log'), 'maxBytes': 300 * 1024 * 1024, 'backupCount': 10, 'formatter': 'simple', 'encoding': 'utf-8', # 设置默认编码 }, # 控制台输出 'console': { 'level': 'DEBUG' if DEBUG else "INFO", 'filters': ["require_debug_true"], 'class': 'logging.StreamHandler', 'formatter': 'standard' }, # 输出info日志 'file': { 'class': 'logging.handlers.RotatingFileHandler', 'filename': os.path.join(log_path, 'django.log'), 'maxBytes': 300 * 1024 * 1024, 'backupCount': 10, 'formatter': 'simple', 'encoding': 'utf-8', # 设置默认编码 }, 'mylogger': { 'class': 'logging.handlers.RotatingFileHandler', 'filename': os.path.join(log_path, 'service.log'), 'maxBytes': 300 * 1024 * 1024, 'backupCount': 10, 'formatter': 'simple', 'encoding': 'utf-8', # 设置默认编码 }, }, # 配置用哪几种 handlers 来处理日志 'loggers': { # 类型 为 django 处理所有类型的日志, 默认调用 'django': { 'handlers': ['console', 'file'], 'level': 'ERROR', 'propagate': False }, 'django.request': { 'handlers': ['err'], 'level': 'ERROR', 'propagate': False }, # log 调用时需要当作参数传入 'mylogger': { 'handlers': ['mylogger', 'console'], 'level': 'DEBUG', 'propagate': True }, } } LANGUAGE_CODE = 'zh-hans' TIME_ZONE = 'Asia/Shanghai' USE_I18N = True USE_L10N = True USE_TZ = True TEST_CONF_DIR = os.path.join(BASE_DIR, "common/conf/test_conf.ini") FILE_DIR = os.path.join(BASE_DIR, "files") if not os.path.exists(FILE_DIR): os.mkdir(FILE_DIR) # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/2.2/howto/static-files/ # 配置静态文件 STATIC_URL = '/static/' STATICFILES_DIRS = [ os.path.join(BASE_DIR, STATIC_URL), ]
django2.2.6 日志
最新推荐文章于 2021-08-03 19:47:59 发布