drf全局异常处理,接口文档,jwt介绍和原理,base64编码和解码

发布时间 2023-05-26 21:17:24作者: 秃头不爱学

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并不是一种加密方式,只是编码解码方式