首页 > 其他分享 >drf之异常处理、前端取值、断点调试使用、原生djang的cookie+session认证底层原理

drf之异常处理、前端取值、断点调试使用、原生djang的cookie+session认证底层原理

时间:2023-02-08 21:57:03浏览次数:57  
标签:exception djang 断点 request session res 异常 drf

目录

如何从前端取值?

  1. 地址栏中取

    request.query_params.get('token')
    
  2. 原生django,取出前端传入的cookie,在哪里取到?

    request.COOKIE.get.('sessionid')
    
  3. 后期如果想从请求头中取

    request.META.get('HTTP_TOKEN')
    后台书写的小写token都会统一变成大写的TOKEN+ HTTP_
    

原生djang的cookie+session认证底层原理

image

断点调试使用

程序是 debug模式运行,可以在任意位置停下,查看当前情况下变量数据的变化情况

pycharm调试程序

以debug形式运行   
代码行左侧可以加入断点---红圈
step over   单步调试
step into   进入到函数内部运行
绿色箭头     快速调到下一个断点

异常处理

APIView---dispatch----三大认证,在执行视图类的方法,如果处理异常,就会被异常捕获,捕获之后会统一处理。因为drf内置了一个函数,只要过程出了异常,就会执行这个函数handle_exception,这个函数只处理drf的异常
image

image

image

由上面可知,最后drf抛异常处理的是在配置里面,如果不管是主动抛异常还是程序运行出错,都统一返回规定的格式,那么就需要在加载系统配置前先加载项目配置文件里,

drf
'EXCEPTION_HANDLER': 'rest_framework.views.exception_handler',
    
项目配置
'EXCEPTION_HANDLER': 'app01.exception.common_exception_handle',
-主动抛的非drf异常
    -程序出错了 ,都不会被处理
    我们的目标,无论主动抛还是程序运行出错,都同意返回规定格式--》能记录日志
    公司里一般返回   {code:999,'msg':'系统错误,请联系系统管理员'}
    
  
# exception.py
from rest_framework.views import exception_handler
from rest_framework.response import Response
def common_exception_handle(exc, context):
    # exc 错误对象
    # context:上下文,有view:当前出错的视图类的对象,args和kwargs视图类方法分组出来的参数,request:当次请求的request对象
    # 只要走到这里,就要记录日志 ,只有错了,才会执行这个函数
    # 记录日志尽量详细
     print(context)
    """{'view': <app01.views.BookView object at 0x000001E1E3C98550>,
     'args': (), 'kwargs': {}, 'request': <rest_framework.request.Request: GET '/api/v1/books/'>}"""
    print('时间,登录用户id,用户ip,请求方式,请求地址,执行的视图类,错误原因')
    res=exception_handler(exc, context)
    if res: # 如果有值,说明返回了Response对象,没有值说明返回了None
        # 如果是Response对象是drf的异常,已经被处理,如果是None表明没有被处理,说明是非drf异常
        res = Response(data={'code':888,'msg':res.data.get('detail','请联系管理员')})
    else:
        res =Response(data={'code':999,'msg':str(exc)})
        # 记录日志
        res = Response(data={'code':888,'msg':'系统错误,前联系管理员'})
    return res

    
 # 视图类
class BookView(ViewSetMixin,APIView):
        def list(self,request):
        # 主动抛drf的异常
        # raise APIException('我是drf异常')

        
        # 主动抛非drf异常
        raise Exception('我是非DRF异常')

        books = Book.objects.all()
        .......

image

标签:exception,djang,断点,request,session,res,异常,drf
From: https://www.cnblogs.com/zhanglanhua/p/17103429.html

相关文章