首页 > 其他分享 >django中间件处理返回数据

django中间件处理返回数据

时间:2023-11-19 20:34:34浏览次数:29  
标签:返回 code get JsonResponse 中间件 django msg response

django中间件处理返回数据

统一接口返回数据格式的时候,每个视图都需要返回JsonResponse对象,比较麻烦,因此增加中间件处理视图返回的结果。

from django.http.response import JsonResponse, HttpResponseBase

code_msg_map = {
    0: 'ok',
    1: 'The args missing.',
    1000: 'The file does not exist.',
}


class ResponseMiddleware:
    """包装视图返回的数据,创建 JsonResponse 对象"""
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        response = self.get_response(request)
        # 包装返回的数据
        if not isinstance(response, HttpResponseBase):
            if isinstance(response, int):
                # 只返回错误码,没有数据,默认为 {}
                response = JsonResponse({'code': response, 'msg': code_msg_map.get(response, ''), 'data': {}})
            elif isinstance(response, tuple):
                # 包括错误码和数据
                code, data = response
                response = JsonResponse({'code': code, 'msg': code_msg_map.get(code, ''), 'data': data})
            else:
                # 只有数据,错误码默认为 0
                response = JsonResponse({'code': 0, 'msg': code_msg_map.get(0, ''), 'data': response})
        return response

标签:返回,code,get,JsonResponse,中间件,django,msg,response
From: https://www.cnblogs.com/shouwangrenjian/p/17842577.html

相关文章

  • django目录介绍与运行 app新建及配置
    1django目录介绍-day60项目名 -app01app的名字 -migrations数据库变更相关记录(你不要删,也不要改)-admin.py后台管理(创建项目如果没有选,就没有)-apps.pyapp的相关配置,不用管-models.py数据库相关(重点)-tests.py测试......
  • 函数(2)从函数中返回
    <1>从函数中返回值————————return:如果我们所定义的函数要返回一个结果,那么我们就需要用return将这个结果交给所调用的函数。(1)注意:返回类型我们以一段代码为例:intisprime(inti){intret=1;intk;for(k=2;k<i-1;k++){if(i%k==0){ret=0;break;}}returnret;......
  • django如何将查询结果的栏位和数值自动遍历出来
    在Django中,MT003HModel.objects.all()返回的是一个QuerySet对象,你可以使用迭代器来遍历其中的每个对象,然后访问对象的属性来获取栏位和数值。以下是一个简单的示例代码,假设MT003HModel包含字段field1和field2:mt002_objects=MT003HModel.objects.all()formt002_obj......
  • django信号中的条件判断不符合时如何提示错误并返回
    在Django中,如果你在信号(Signal)处理函数中需要进行条件判断,如果条件不符合,你可以触发一个异常,并在视图或其他地方捕获这个异常,然后返回相应的错误提示。以下是一个简单的例子,演示如何在信号处理函数中进行条件判断并触发异常:#models.pyfromdjango.dbimportmodelsfromdjan......
  • django 信号判断是新增、修改还是删除
    在Django的信号处理器中,你可以使用一些方法来确定信号是关于新增(create)、修改(update)还是删除(delete)的。这通常涉及到检查created和instance参数的值。以下是一个例子,展示了如何在信号处理器中判断是新增、修改还是删除:fromdjango.db.models.signalsimportpost_save,pre......
  • django 信号第一个 raise ValidationError出现后,还会继续下一个if吗
    在你提供的代码片段中,如果第一个raiseValidationError触发,会抛出异常并停止执行当前函数或代码块。这是因为异常(Exception)会中断正常的代码流程,将控制权传递给调用堆栈中的第一个能够捕获该异常的地方。所以,如果v_lot_no为空,第一个raiseValidationError被触发后,后续的if......
  • django 如何查询汇总的求和时避免没有数据导致的错误
    django如何查询汇总的求和时避免没有数据导致的错误在Django中,如果你希望对某个字段进行求和操作,并在没有数据时返回默认值,可以使用aggregate结合Coalesce函数。Coalesce函数用于返回参数中的第一个非空值,这样你可以在没有匹配项时设置默认值。以下是一个示例:fromdjan......
  • django 信号 新增和删除信的合用
    fromdjango.db.models.signalsimportpost_save,post_deletefromdjango.dispatchimportreceiverfromdjango.dbimporttransactionfrom.modelsimportMT002HModel@receiver(post_save,sender=MT002HModel)@receiver(post_delete,sender=MT002HModel)@transa......
  • 汇编-SIZEOF返回数组字节总数
     SIZEOF操作符的返回值等于LENGTHOF与TYPE的返回值的乘积.386.modelflat,stdcall.stack4096ExitProcessPROTO,dwExitCode:DWORD.dataintArrayWORD32DUP(0).codemainPROCmoveax,SIZEOFintArray;EAX = 00000040h=64INV......
  • Django2.0以上版本path方法——路由层使用的转换器(五种)
    str#匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式int#匹配正整数,包含0。slug#匹配字母、数字以及横杠、下划线组成的字符串。uuid#匹配格式化的uuid,如075194d3-6885-417e-a8a8-6c931e272f00。path#匹配任何非空字符串,包含了路径分隔符(/)使用方式:p......