第三方库
django REST framework
https://www.django-rest-framework.org/
本次开发使用的是前后端分离的方式开发,所以后端使用django REST framework
来编写RESTful
风格的API
特性:
- 强大的序列化器,可以高效的进行序列化和反序列化操作。
- 极丰富的类视图,Mixin扩展视图,ViewSet视图
- 提供了直观的web api界面
- 支持多种身份认证和权限认证
- 强大的排序,过滤,分页,搜索,限流等功能。
- 扩展性强, 插件丰富
django-excel
http://django.pyexcel.org/zh/latest/index.html
需求中需要将数据导出excel来进行查看,所以使用django-excel
来操作
django-filter
https://django-filter.readthedocs.io/en/main/
django-filter
可以方便的进行内容的过滤,在搜索栏输入内容搜索的时候会用到。比如进行模糊查询
drf-yasg
https://drf-yasg.readthedocs.io/en/stable/
drf-yasg
根据代码生成swagger页面,方便后面的调试
Faker
https://faker.readthedocs.io/en/master/index.html
自动生成随机的测试数据时使用
requests
发起http请求测试接口时使用
PyMySQL
后面正式环境的时候连接mysql使用
全部依赖
将依赖放到requirements.txt文件中
代码语言:javascript复制Django==3.2.11
django-cors-headers==3.11.0
django-excel==0.0.10
django-filter==21.1
djangorestframework==3.13.1
djangorestframework-simplejwt==5.1.0
PyMySQL==1.0.2
drf-yasg==1.21.3
Faker==13.3.3
requests==2.27.1
部署环境的时候需要
代码语言:javascript复制pip install -r requirements.txt
修改settings.py
修改允许放行的host
代码语言:javascript复制ALLOWED_HOSTS = ["*"]
新增引入的包
只有把刚才装的第三方库放到INSTALLED_APPS
才会生效
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'rest_framework_simplejwt',
'django_filters',
'corsheaders',
'drf_yasg',
]
增加中间件
新增跨域请求的中间件
代码语言:javascript复制"corsheaders.middleware.CorsMiddleware",
代码语言:javascript复制MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
"corsheaders.middleware.CorsMiddleware",
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
修改时区和语言
代码语言:javascript复制LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
USE_TZ = True
新增日志打印方式
代码语言:javascript复制LOGGING = {
'version': ,
'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': BASE_DIR / 'logs/logging.log', # 日志文件的位置
'maxBytes': * * ,
'backupCount': ,
'formatter': 'verbose'
},
},
'loggers': { # 日志器
'django': { # 定义了一个名为django的日志器
'handlers': ['console', 'file'], # 可以同时向终端与文件中输出日志
'propagate': True, # 是否继续传递日志信息
'level': 'INFO', # 日志器接收的最低日志级别
},
}
}
新增DRF的配置
代码语言:javascript复制REST_FRAMEWORK = {
# 设置默认的全局用户验证方案
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework_simplejwt.authentication.JWTAuthentication',
'rest_framework.authentication.SessionAuthentication',
],
"DEFAULT_RENDERER_CLASSES": (
# json渲染器为第一优先级
"rest_framework.renderers.JSONRenderer",
# 可浏览的API渲染为第二优先级
"rest_framework.renderers.BrowsableAPIRenderer",
),
# 过滤器
'DEFAULT_FILTER_BACKENDS': [
'rest_framework.filters.OrderingFilter',
'django_filters.rest_framework.DjangoFilterBackend'
],
# 异常处理
'EXCEPTION_HANDLER': 'utils.exception.exception_handler'
}
新增JWT配置
代码语言:javascript复制# JWT配置
SIMPLE_JWT = {
'ACCESS_TOKEN_LIFETIME': timedelta(days=), # token过期时间1天
'REFRESH_TOKEN_LIFETIME': timedelta(days=),
}
新增允许跨域的域名列表
代码语言:javascript复制# CORS设置
# 允许跨域的域名列表
CORS_ALLOWED_ORIGINS = [
'http://localhost:8081',
'http://127.0.0.1:8081',
'http://127.0.0.1:2800',
'http://localhost:2800',
]
# 允许cookies跨域
CORS_ALLOW_CREDENTIALS = True
标记日志文件存放位置
代码语言:javascript复制# 测试日志目录
TEST_LOG_DIR = BASE_DIR / 'logs' / 'test_logs'
标记文件存放日志
用于存放后面上传的图片文件、常量文件等
代码语言:javascript复制# 文件目录
MEDIA_URL = "/media/"
MEDIA_ROOT = BASE_DIR / 'media'
STATIC_ROOT = BASE_DIR.parent / 'nginx_docker' / 'static'
新建日志存放文件夹
新建logs
和media
两个文件夹,在空文件夹中新增一个.gitkeep
文件,方便git管理空文件夹
验证
再次运行后端项目并正确运行,且文字都变为中文