Django配置文件解析+drf全局异常处理+接口文档

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':'图书名'}}
posted @ 2023-04-29 16:37  维生素Z  阅读(93)  评论(0)    收藏  举报