首页 > 其他分享 >drf全局异常处理,接口文档,jwt介绍和原理,base64编码和解码

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

时间:2023-05-26 21:25:14浏览次数:32  
标签:res base64 jwt rest framework 文档 import drf

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

相关文章

  • 全局异常处理,接口文档,JWT,base64编码解码
    1全局异常处理#对于前端来讲,后端即便报错,也要返回统一的格式,前端便于处理{code:999,msg:'系统异常,请联系系统管理员'}#只要三大认证,视图类的方法出了异常,都会执行一个函数:rest_framework.viewsimportexception_handler###注意:exception_handler#如果异常对象是......
  • drf之全局异常处理和 接口文档
    目录一、全局异常处理注意:exception_handler补充:新建一个exception文件放我们自己写的异常方法配置文件二、接口文档后端把接口写好后接口文档的编写形式使用coreapi自动生成接口文档(文件drf_09)一、全局异常处理对于前端来讲,后端即便报错,也要返回统一的格式,前端便于处理只......
  • drf之restful规范中的过滤、排序和分页
    目录一、过滤内置过滤类第三方过滤类自定义过滤类价格再100----200之间的图书二、排序三、分页作业过滤和排序带分页一、过滤restful规范中-请求地址中带过滤条件带过滤的接口只有:查询所有内置过滤类fromrest_framework.filtersimportSearchFilterclassBookView(G......
  • drf——基于apiview写过滤、排序和分页
    基于APIView带过滤和排序fromrest_framework.viewsimportAPIViewfrom.modelsimportBookfrom.serializerimportBookSerializerfromrest_framework.responseimportResponseclassBookView(APIView):#/books/?ordering=-price&name=红楼梦defget(self,......
  • SpringBoot集成JWT(极简版)
    话不多说,直接上代码接口统一前缀设置importorg.springframework.context.annotation.Configuration;importorg.springframework.web.bind.annotation.RestController;importorg.springframework.web.servlet.config.annotation.PathMatchConfigurer;importorg.springframewo......
  • Python图片与Base64相互转换
    importbase64#必须的pic=open("img.png","rb")#读取本地文件pic_base=base64.b64encode(pic.read())#本地文件转Base64数据,此时会出现编码带b'' 的情况pic_base=pic_base.decode('utf-8')#修正格式pic.close()#关闭importbase64pic=open("img.png&q......
  • Python实现JWT的生成及验证
    一、概述    在JWT安全性总结中提到了JWT的三个组成部分,包括header、claims以及signature,其中Signature是一个签名的部分,其计算方法为:HMACSHA256(base64UrlEncode(header)+"."+base64UrlEncode(payload),secret),即header的BASE64编码、点号、Clamis的BASE64编码以及将se......
  • drf——权限、认证源码分析、过滤、排序、分页
    权限、认证源码(了解)权限源码#继承了APIView才有的---》执行流程---》dispatch中的三大认证 self.initial(request,*args,**kwargs) #1.APIView的dispatch中self.initial(request,*args,**kwargs) definitial(self,request,*args,**kwargs):se......
  • drf过滤,drf排序,drf分页
    drf过滤:带过滤的接口只有:查询所有内置过滤类:http://127.0.0.1:8000/api/v1/books/?search=红http://127.0.0.1:8000/api/v1/books/?search=11此类查询类似于模糊查询fromrest_framework.filtersimportSearchFilterclassBookView(Gene......
  • drf-5个接口
    目录写接口前的准备1表模型序列化类一继承APIView+序列化类+Resonse写5个接口视图类路由二继承GenericAPIView+序列化类+Resonse写5个接口视图类路由三继承GenericAPIView+5个视图扩展类+序列化类+Response写接口视图类路由四基于视图子类写5个接口:9个视图子类--->视图......