首页 > 其他分享 >前端报错时如何排查问题

前端报错时如何排查问题

时间:2023-04-09 18:01:15浏览次数:37  
标签:body obj QueryDict 前端 request 排查 报错 PUT id

前端页面报错:

 1、页面报错500,首先我们可以知道是服务端的问题,需要去看下服务端的报错信息:

2、首先我们查看下前端是否给后端传了id:

 我们可以看到接口是把ID返回了,就需要再看下p_id是什么情况了

 3、我们再次请求,把p_id进行打印,看下具体是什么:

put接口代码

class PutView(BaseView):

    def put(self, request):
        # Django 并没有处理PUT数据,不可以使用request.PUT
        # 实际put传过来的数据是在request.body中,而获取到的数据是:b'name=%E5%8F%82%E6%95%B06&desc=%E5%8F%82%E6%95%B06%E6%8F%8F%E8%BF%B0&value=100866'
        # 需要导入 from django.http import QueryDict,QueryDict(request.body)} 处理下
        # 更新数据:需要告知是具体更新哪一条数据
        # 获取要更新哪条数据的主键id
        p_id = request.PUT.get('id')
        print('p_id',p_id)
        # 通过id 从数据库中取这条数据 obj
        data_obj = self.model.objects.get(id=p_id)
        # 第一个参数:前端传过来的数据
        # 第二个参数(instance):数据库获取的,要更新的对象
        form_obj = self.form(request.PUT, instance=data_obj)
        if form_obj.is_valid():
            # 通过 form中的save方法进行数据更新
            form_obj.save()
            return NbResponse()
            # return JsonResponse({"code": 200, "msg": "put接口数据更新成功"})
        else:
            return NbResponse(code=500,msg=form_obj.errors.get_json_data())

middle_wares.py

class PutMethodMiddleware(MiddlewareMixin):
    def process_request(self, request):
        # 请求过来之后,先走到这里
        if request.method == 'PUT':
            request.PUT = QueryDict(request.body)

分析:因Django中没有PUT 方法,是我们在 middle_wares.py 中分装了后实现的PUT 方法,所以我们就需要看下【QueryDict(request.body)】返回的是什么:

class PutMethodMiddleware(MiddlewareMixin):
    def process_request(self, request):
        # 请求过来之后,先走到这里
        if request.method == 'PUT':
            print('QueryDict(request.body)===',QueryDict(request.body))
            request.PUT = QueryDict(request.body)

结果:

QueryDict(request.body)=== <QueryDict: {'------WebKitFormBoundarycRPtgGxEmmEAlBmC\r\nContent-Disposition: form-data': [''], ' name': ['"name"\r\n\r\n继
续测试111\r\n------WebKitFormBoundarycRPtgGxEmmEAlBmC\r\nContent-Disposition: form-data', '"value"\r\n\r\n继续测试\r\n------WebKitFormBoundarycRPtgGxEmm
EAlBmC\r\nContent-Disposition: form-data', '"desc"\r\n\r\n继续测试\r\n------WebKitFormBoundarycRPtgGxEmmEAlBmC\r\nContent-Disposition: form-data', '"id"
\r\n\r\n19\r\n------WebKitFormBoundarycRPtgGxEmmEAlBmC--\r\n']}>

我们可以发现数据格式并不是我们以往的那样,我就需要回到前端中查看下【Request Headers】中的信息:

 Content-Type发生了变化,所以传过来的数据也发生了变化,所以后端代码就需要把代码进行调整,兼容这种传递的方式

查验源码后,进行调整:

class PutMethodMiddleware(MiddlewareMixin):
    @staticmethod
    def process_request(self, request):
        # 请求过来之后先走到这里,然后再去请求视图
        if request.method == 'PUT':
            if 'boundary' in request.content_params.kes():
                put_data,files = request.parse_file_upload(request.MEAT,request)
                request.PUT = put_data
                request._files = files # 是因为request.FILES 里面取值的时候,就是_files
            else:
                request.PUT = QueryDict(request.bady)

已可正常修改无报错:

 


 

标签:body,obj,QueryDict,前端,request,排查,报错,PUT,id
From: https://www.cnblogs.com/brf-test/p/17300627.html

相关文章

  • 浏览器层面优化前端性能(2):Reader引擎线程与模块分析优化点
    Reader引擎线程与模块分析 首先是网页内容,加载完输入到HTML解释器,解释后构成DOM树,这期间如果遇到JavaScript代码就交给JavaScript引擎去处理,如果网页中包含CSS,就交给CSS解释器;DOM树简历的时候,渲染引擎接收来自CSS解释器的样式信息,构建一个新的你日不会吐模型,该模型由布局模......
  • 浏览器层面优化前端性能(1):Chrom组件与进程/线程模型分析
    现阶段的浏览器运行在一个单用户,多合作,多任务的操作系统中。一个糟糕的网页同样可以让一个现代的浏览器崩溃。其原因可能是一个插件出现bug,最终的结果是整个浏览器以及其他正在运行的标签被销毁。现代操作系统已经非常健壮了,它让应用程序在各自的进程中运行和不会影响到其他程序......
  • 【前端工具类】003-实时获取鼠标位置的工具类:useMousePosition
    【前端工具类】003-实时获取鼠标位置的工具类:useMousePosition文章目录【前端工具类】003-实时获取鼠标位置的工具类:useMousePosition一、Vue3usexxx写法1、代码2、使用示例一、Vue3usexxx写法1、代码import{ref,onMounted,onUnmounted}from"vue";exportfunctionuse......
  • ruoyi-cloud微服务版启动过程报错_20230320版_ Verion 9 of Highlight.js has reached
      Verion9ofHighlight.jshasreachedEOL. Itwillnolonger报错: 这里修改成10.7.3版本D:\2023\qdBigData\RuoYi-Cloud-master\ruoyi-ui>npminstall--registry=https://registry.npm.taobao.org然后到对应目录,再去执行编译去看看.不报错了 >npmrundev然后执行看......
  • [从0开始]PHP+phpstudy留言板项目搭建教程及报错详析
    [从0开始]PHP+phpstudy留言板项目搭建教程及报错详析基础知识及工具准备基础知识:四种语言PHPPHP是在服务器端执行的脚本语言,适用于Web开发并可嵌入HTML中。学习网站:PHP教程|菜鸟教程SQLSQL是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统......
  • Keepalive启动报错,Fail to start LVS and VRRP High...
    Keepalive启动报错,FailtostartLVSandVRRPHighAvailabilityMonitor.输入:systemctlstatuskeepalive,显示信息如下:再输入:journalctl-xe解决办法:chmod644keepalived.conf......
  • 解决前端启动报错:This is probably not a problem with npm. There is likely additio
    在执行npmrundev运行项目的时候报错:{"os":"darwin","arch":"any"}(current:{"os":"win32","arch":"x64"})npmERR!codeELIFECYCLEnpmERR!errno1npmERR!phantomjs-prebuilt@2.1.16in......
  • 前端开发-BootStrap
    Bootstrapv3中文文档·Bootstrap是最受欢迎的HTML、CSS和JavaScript框架,用于开发响应式布局、移动设备优先的WEB项目。|Bootstrap中文网(bootcss.com) 创建引入  ......
  • npm install报错 npm ERR! 的四种解决办法
    整理了自己在安装过程中碰到的四种npmERR及解决方式错误一、npmERR!Acompletelogofthisruncanbefoundin:npmERR!C:\Users\nanyi\AppData\Roaming\npm-cache_logs\2021-09-17T08_58_23_413Z-debug.l查看错误日志,错误日志就在上面展示的C:\Users…这里如果发现错误日......
  • vscode 开发 vue3项目 , src 别名 为 @ ,报错
    https://geekdaxue.co/read/me-note@vue/mydm8l需要设置basicURL然后就生效了{"compilerOptions":{//设置解析非相对模块名称的基本目录"baseUrl":".",//设置模块名到基于baseUrl的路径映射,可以设置路径别名的语法提示"paths":{"@/*......