drf全局异常处理:
只要三大认证,视图类的方法出了异常,都会执行一个函数:rest_framework.views import exception_handler
setting:
REST_FRAMEWORK = { 'EXCEPTION_HANDLER': 'app01.exception.commn_exception_handler', # 导入自己写的异常类的路径 }
view内:
from rest_framework.exceptions import APIException class BookView(APIView): def get(self, request): ordering = request.query_params.get('ordering') name = request.query_params.get('name') book_list = Book.objects.all() raise APIException('这是drf模块的异常')
自己写的全局异常方法中:
from rest_framework.views import exception_handler from rest_framework.response import Response def commn_exception_handler(exc, context): res=exception_handler(exc,context) if res: if isinstance(res.data,dict): detail=res.data.get('detail') else: detail=res.data return Response({'code':999,'msg':detail}) else: return Response({'code':998,'msg':str(exc)})
注意:exception_handler
如果异常对象是drf的APIException对象,就会返回Response
exception_handler只处理了drf的异常,其它的异常需要我们自己处理
如果异常对象不是drf的APIException对象,就会返回None
接口文档:
接口文档的编写形式
-1 world,md,编写,大家都可以操作,写完放在git,公司的文档管理平台上
-2 第三方的接口文档平台(收费)
https://www.showdoc.com.cn/
-3 公司自己开发接口文档平台
-4 公司使用开源的接口文档平台,搭建
-YAPI:百度开源的
-https://zhuanlan.zhihu.com/p/366025001
-5 项目自动生成接口文档
-coreapi
-swagger
使用coreapi自动生成接口文档:
view中:
from rest_framework.mixins import CreateModelMixin, UpdateModelMixin, RetrieveModelMixin, ListModelMixin, \ DestroyModelMixin from rest_framework.viewsets import GenericViewSet class BookView(GenericViewSet, ListModelMixin, CreateModelMixin): queryset = Book.objects.all() serializer_class = BookSerializer ''' List: 返回所有图书信息 Create: 增加图书 ''' class BookDetailView(GenericViewSet, UpdateModelMixin, RetrieveModelMixin, DestroyModelMixin): queryset = Book.objects.all() serializer_class = BookSerializer ''' Update: 修改图书 Retrieve: 查看某个单本图书 Destroy: 删除图书 '''
url中:
from rest_framework.routers import SimpleRouter from rest_framework.documentation import include_docs_urls #此条路径需要添加 router=SimpleRouter() router.register('books',views.BookView,'books') router.register('books1',views.BookDetailView,'books1') urlpatterns = [ path('admin/', admin.site.urls), path('docs/', include_docs_urls(title='526战略项目')), # path中需要加入此路径 # path('books/',views.BookView.as_view()), path('api/v1/',include(router.urls)) ]
settings中:
REST_FRAMEWORK = { 'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema', }
前端展示页面:http://127.0.0.1:8000/docs/
序列化类中:
class BookSerializer(serializers.ModelSerializer): class Meta: model = Book fields = ['name', 'price', 'publish_obj', 'publish'] extra_kwargs = { 'name': {'help_text': '图书的书名'}, #给前端展示的注释 'price': {'help_text': '图书的价格'}, #给前端展示的注释 'publish': {'write_only': True}, }
-使用步骤:
-1 安装:pip3 install coreapi
-2 加一个路由
from rest_framework.documentation import include_docs_urls
urlpatterns = [
path('docs/', include_docs_urls(title='站点页面标题'))
]
-3 在视图类上加注释
-4 配置文件中配置:
'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema',
-5 表模型或序列化类的字段上写 help_text--->会显示在接口文档的字段介绍上
-6 访问地址:
http://127.0.0.1:8000/docs/
jwt介绍和原理:
cookie,session,token发展历史
-会话管理
-cookie:客户端浏览器的键值对
-session:服务的的键值对(djangosession表,内存中,文件,缓存数据库)
-token:服务的生成的加密字符串,如果存在客户端浏览器上,就叫cookie
-三部分:头,荷载,签名
-签发:登录成功,签发
-认证:认证类中认证
base64编码和解码:
base64编码:
import json import base64 d={'username':'ydh','password':123} d_str=json.dumps(d) res=base64.b64encode(bytes(d_str,encoding='utf-8')) print(res)
base64解码:
res=base64.b64decode('eyJ1c2VybmFtZSI6ICJ5ZGgiLCAicGFzc3dvcmQiOiAxMjN9') print(res)
base64并不是一种加密方式,只是编码解码方式
标签:res,base64,jwt,rest,framework,文档,import,drf From: https://www.cnblogs.com/Hao12345/p/17435836.html