一个django的settings文件不需要我们手动去设置所有项目,因为系统已经默认设置好了。我们只需要修改我们使用的设定就好了。
调整目录后,需要把apps加入到环境变量,以下是我的项目设置的settings.py配置文件
import os, sys, time from pathlib import Path # Build paths inside the project like this: BASE_DIR / 'subdir'. BASE_DIR = Path(__file__).resolve().parent.parent # 1.把apps路径加入环境变量 sys.path.insert(2, os.path.join(Path(__file__).resolve().parent)) sys.path.insert(3, os.path.join(Path(__file__).resolve().parent, 'apps')) # print(sys.path) # Quick-start development settings - unsuitable for production # See https://www.dnzp.com/uploads/allimg/230920/4wk5y3sneb1 # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = 'django-insecure-)8l%3#p%xe8t+q3+lcq6sknhi0hpb%9=a)g4f6sb7dxps7qw-f' # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True ALLOWED_HOSTS = [] # Application definition # 2.注册app INSTALLED_APPS = [ 'simpleui', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'book.apps.BookConfig', 'rest_framework', 'django_filters', 'corsheaders', ] # 3.中间件 MIDDLEWARE = [ 'corsheaders.middleware.CorsMiddleware', 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'corsheaders.middleware.CorsPostCsrfMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] ROOT_URLCONF = 'drf_book.urls' 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 = 'drf_book.wsgi.application' # 4.数据库配置 # https://www.dnzp.com/uploads/allimg/230920/yjggoowa4ub DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'db.sqlite3', } } # Password validation # https://www.dnzp.com/uploads/allimg/230920/rcesvtpzzvl 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://www.dnzp.com/uploads/allimg/230920/31lz3v350zd # 5.配置语言和时区 LANGUAGE_CODE = 'zh-hans' TIME_ZONE = 'Asia/Shanghai' USE_I18N = True USE_TZ = False # Static files (CSS, JavaScript, Images) # https://www.dnzp.com/uploads/allimg/230920/d3e0p335asd STATIC_URL = 'static/' # Default primary key field type # https://www.dnzp.com/uploads/allimg/230920/a3b0mt55p20 DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' # 6.日志的配置 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', # 实际开发建议使用ERROR 'class': 'logging.handlers.RotatingFileHandler', 'filename': os.path.join(os.path.dirname(BASE_DIR), "logs", "logs.log"), # 日志保存位置 'maxBytes': 100 * 1024 * 1024, # 日志文件的最大值,这里我们设置300M 'backupCount': 100, # 日志文件的数量,设置最大日志数量为10 'formatter': 'verbose', # 日志格式:详细格式 'encoding': 'utf-8', # 文件内容编码 }, }, 'loggers': { # 日志对象 'django': { 'handlers': ['console', 'file'], 'propagate': True, # 是否让日志信息继续冒泡给其他的日志处理系统 }, } } # 7.跨域的配置 CORS_ORIGIN_ALLOW_ALL = False CORS_ORIGIN_WHITELIST = ( # 授权跨站点HTTP请求的来源列表 "http://127.0.0.1:8000", "http://www.devops.com:8888", ) CSRF_TRUSTED_ORIGINS = [ "127.0.0.1", "www.devops.com", # 发起请求的地址,不需要添加http和端口 ] # 8.设置邮箱服务器 EMAIL_HOST = 'smtp.qq.com' EMAIL_PORT = 25 EMAIL_USE_TLS = True EMAIL_HOST_USER = '243662875@qq.com' # 帐号 EMAIL_HOST_PASSWORD = 'svvznofprpbc' # 密码 # 9.DRF设置 REST_FRAMEWORK = { 'EXCEPTION_HANDLER': 'devops.utils.exceptions.common_exception_handler', # 自定义异常处理 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination', # 分页 'PAGE_SIZE': 10, }以下设置控制基本API策略,并应用于每个基于APIView类的视图或基于@api_view函数的视图。
参考:https://q1mi.github.io/Django-REST-framework-documentation/api-guide/settings/
#1.访问项目中RESTframework的API设置值 #api_settings对象将检查用户定义的设置,否则将回退到默认值。任何使用字符串导入路径引用类的设置都会自动导入并返回被引用的类,而不是字符串文字。 from rest_framework.settings import api_settings print(api_settings.DEFAULT_AUTHENTICATION_CLASSES) #2.API参考 REST_FRAMEWORK = { #1.渲染器类的列表或元组,用于确定返回Response对象时可能使用的默认渲染器集。 "DEFAULT_RENDERER_CLASSES": ( 'rest_framework.renderers.JSONRenderer', 'rest_framework.renderers.BrowsableAPIRenderer', ), #2.解析器类的列表或元组,用于确定访问request.data属性时使用的默认解析器集 "DEFAULT_PARSER_CLASSES": ( 'rest_framework.parsers.JSONParser', 'rest_framework.parsers.FormParser', 'rest_framework.parsers.MultiPartParser' ), #3.身份验证类的列表或元组,用于确定在访问request.user或request.auth属性时使用的默认身份验证集。 "DEFAULT_AUTHENTICATION_CLASSES": ( 'rest_framework.authentication.SessionAuthentication', 'rest_framework.authentication.BasicAuthentication' ), #4.权限类的列表或元组,用于确定在视图开始时检查的默认权限集。权限必须由列表中的每个类授予。 "DEFAULT_PERMISSION_CLASSES": ( 'rest_framework.permissions.AllowAny', ), #5.限流类的列表或元组,用于确定在视图开始时检查的默认限流类集。 "DEFAULT_THROTTLE_CLASSES": ( 'rest_framework.throttling.AnonRateThrottle', 'rest_framework.throttling.UserRateThrottle', ), "DEFAULT_THROTTLE_RATES": { 'anon': '100/day', #未登录的用户所有接口1天访问100次 'user': '1000/day' #已登录的用户所有接口1天访问1000次 }, #6.用于通用过滤的过滤器后端类列表。 'DEFAULT_FILTER_BACKENDS': ( 'django_filters.rest_framework.DjangoFilterBackend', # 过滤 'rest_framework.filters.OrderingFilter' # 排序 ), #7.用于分页的默认页面大小。 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination', 'PAGE_SIZE': 10, #8.配置自定义的异常处理 'EXCEPTION_HANDLER': 'demo.utils.exceptions.common_exception_handler', }