10.11内容整理和概述
今日内容概要
内容目录
- Django配置文件解析
- drf全局异常处理
- 接口文档
Django配置文件解析
Django项目运行前提:加载Django的配置文件(settings.py),配置文件报错,项目无法启动 # 配置文件的配置项都是大写
'-----------配置项解析---------------'
1.BASE_DIR:定义该项目根目录
2.SECRET_KEY:定义当前项目的密钥,用于项目中涉及加密的部分 # 密钥自动生成
3.DEBUG:定义项目模式。如果是True,项目是调试模式,用于开发阶段,会有很多提示;如果是False,项退出调试模式,一般用于项目上线
4.ALLOWED_HOSTS:定义项目部署的地址 # 如果DEBUG是False,ALLOWED_HOSTS属性必须填
5.INSTALLED_APPS:注册app # Django大而全,这么牛就是内置了很多app
1.'django.contrib.admin':后台管理app
2.'django.contrib.auth':权限 # 6个表
3.'django.contrib.contenttypes'
4.'django.contrib.sessions':session认证相关
5.'django.contrib.messages':消息框架 # 不需要了解
6.'django.contrib.staticfiles':静态文件
6.MIDDLEWARE:定义中间件
1.'django.middleware.security.SecurityMiddleware'
2.'django.contrib.sessions.middleware.SessionMiddleware':session相关
3.'django.middleware.common.CommonMiddleware':两次路由匹配
4.'django.middleware.csrf.CsrfViewMiddleware':csrf相关
5.'django.contrib.auth.middleware.AuthenticationMiddleware':认证相关
6.'django.contrib.messages.middleware.MessageMiddleware':消息框架
7.'django.middleware.clickjacking.XFrameOptionsMiddleware'
7.ROOT_URLCONF:根路由 # 所有请求进来,先去根路由匹配
8.TEMPLATES:模板相关 # 用于前后端混合的开发模式
9.WSGI_APPLICATION:定义项目上线后,程序的启动文件;测试阶段用manage.py
10.DATABASES:数据库配置 # 可以使用多数据库
11.AUTH_PASSWORD_VALIDATORS:auth的认证相关 # 不需要了解
12.LANGUAGE_CODE:定义语言
13.TIME_ZONE:定义时区
14.STATIC_URL:静态文件相关
15.DEFAULT_AUTO_FIELD:规定所有的自增主键的字段类型
drf全局异常处理
'------------源码分析-------------'
1.在APIView类的dispatch方法中定义了全局异常捕获,只要报错,运行self.handle_exception(exc)方法,并把错误信息传入,返回给response
'-handle_exception方法-'
1.执行self.get_exception_handler(),拿取配置文件settings.EXCEPTION_HANDLER传给exception_handler # 配置文件EXCEPTION_HANDLER参数对应数据:'rest_framework.views.exception_handler'
2.exception_handler加括号运行,传入参数(exc, context),返回给response
3.在将response返回出去
2.在执行finalize_response方法在返回出去
总结:只处理drf的异常,django和其他代码错误无法捕获
解决方法:自定义全局异常处理函数,对views类的exception_handler方法做派生
'------------自定义全局异常处理函数-------------'
步骤:
1.自定义新的全局异常处理函数,设置两个形参exc, context
2.调用views类的exception_handler方法并接收返回值
3.对返回值做if判断
4.如果有值,说明是drf内部错误,drf会将错误处理,然后把自定义返回的数据返回
5.如果无值,说明部署drf错误,将自定义返回数据返回
代码案例:
def common_exception_handler(exc, context):
response = exception_handler(exc, context) # views类的exception_handler方法
if response: # 如果response有值,说明drf错误被处理了(Http404,PermissionDenied,APIException)
return Response({'code': 888, 'msg': 'drf错误,错误原因是:%s' % response.data.get('detail', '未知错误')})
else: # 如果是None,这个错误没有被处理,说明这个错误不是drf的错误,而是django的或代码的错误
return Response({'code': 999, 'msg': '系统错误,错误原因是:%s' % str(exc)})
补充:当前方法可以进行日志管理
接口文档
应用背景:接口编写完成,需要编写相关文档,给前端的人使用
常用三种接口文档写法:
1.使用word或者md编写
2.使用接口文档平台:
1.百度开源平台:Yapi
2.第三方平台 # 例子:https://www.showdoc.com.cn
3.公司自建平台
3.项目自动生成 # 借助第三方模块:swagger(推荐),coreapi模块:
'--coreapi使用流程---'
1.安装coreapi模块:pip3 install coreapi
2.配置路由:
1.导包:from rest_framework.documentation import include_docs_urls
2.增加路由:path('docs/', include_docs_urls(title='站点页面标题'))
3.直接在视图类中加入对应方法的注释
4.在配置文件REST_FRAMEWORK属性中增加配置:'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema'
3.查看文档:项目启动,浏览器直接输入路由
补充:
1.字段名增加备注:在序列化类的extra_kwargs参数上增加配置--'字段名:{'help_text':'备注数据'}' # 例子:extra_kwargs={'name':{'help_text':'图书名'}}