实例表明碰到前端报错时怎样排查题目

[复制链接]
发表于 2026-1-29 15:37:05 | 显示全部楼层 |阅读模式
前端页面报错:

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

2、起首我们检察下前端是否给后端传了id:

 我们可以看到接口是把ID返回了,就须要再看下p_id是什么环境了。
3、我们再次哀求,把p_id举行打印,看下具体是什么:

 put接口代码
  1. class PutView(BaseView):
  2.     def put(self, request):
  3.         # Django 并没有处理PUT数据,不可以使用request.PUT
  4.         # 实际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'
  5.         # 需要导入 from django.http import QueryDict,QueryDict(request.body)} 处理下
  6.         # 更新数据:需要告知是具体更新哪一条数据
  7.         # 获取要更新哪条数据的主键id
  8.         p_id = request.PUT.get('id')
  9.         print('p_id',p_id)
  10.         # 通过id 从数据库中取这条数据 obj
  11.         data_obj = self.model.objects.get(id=p_id)
  12.         # 第一个参数:前端传过来的数据
  13.         # 第二个参数(instance):数据库获取的,要更新的对象
  14.         form_obj = self.form(request.PUT, instance=data_obj)
  15.         if form_obj.is_valid():
  16.             # 通过 form中的save方法进行数据更新
  17.             form_obj.save()
  18.             return NbResponse()
  19.             # return JsonResponse({"code": 200, "msg": "put接口数据更新成功"})
  20.         else:
  21.             return NbResponse(code=500,msg=form_obj.errors.get_json_data())
复制代码
middle_wares.py:
  1. class PutMethodMiddleware(MiddlewareMixin):
  2.     def process_request(self, request):
  3.         # 请求过来之后,先走到这里
  4.         if request.method == 'PUT':
  5.             request.PUT = QueryDict(request.body)
复制代码
分析:因Django中没有PUT 方法,是我们在 middle_wares.py 中分装了后实现的PUT 方法,以是我们就须要看下【QueryDict(request.body)】返回的是什么:
  1. class PutMethodMiddleware(MiddlewareMixin):
  2.     def process_request(self, request):
  3.         # 请求过来之后,先走到这里
  4.         if request.method == 'PUT':
  5.             print('QueryDict(request.body)===',QueryDict(request.body))
  6.             request.PUT = QueryDict(request.body)
复制代码
结果:
  1. QueryDict(request.body)=== <QueryDict: {'------WebKitFormBoundarycRPtgGxEmmEAlBmC\r\nContent-Disposition: form-data': [''], ' name': ['"name"\r\n\r\n继
  2. 续测试111\r\n------WebKitFormBoundarycRPtgGxEmmEAlBmC\r\nContent-Disposition: form-data', '"value"\r\n\r\n继续测试\r\n------WebKitFormBoundarycRPtgGxEmm
  3. EAlBmC\r\nContent-Disposition: form-data', '"desc"\r\n\r\n继续测试\r\n------WebKitFormBoundarycRPtgGxEmmEAlBmC\r\nContent-Disposition: form-data', '"id"
  4. \r\n\r\n19\r\n------WebKitFormBoundarycRPtgGxEmmEAlBmC--\r\n']}>
复制代码
我们可以发现数据格式并不是我们以往的那样,我就须要回到前端中检察下【Request Headers】中的信息:

 Content-Type发生了厘革,以是传过来的数据也发生了厘革,以是后端代码就须要把代码举行调解,兼容这种通报的方式。
查验源码后,举行调解:
  1. class PutMethodMiddleware(MiddlewareMixin):
  2.     @staticmethod
  3.     def process_request(self, request):
  4.         # 请求过来之后先走到这里,然后再去请求视图
  5.         if request.method == 'PUT':
  6.             if 'boundary' in request.content_params.kes():
  7.                 put_data,files = request.parse_file_upload(request.MEAT,request)
  8.                 request.PUT = put_data
  9.                 request._files = files # 是因为request.FILES 里面取值的时候,就是_files
  10.             else:
  11.                 request.PUT = QueryDict(request.bady)
复制代码
已可正常修改无报错:

末了: 下方这份完备的软件测试视频学习教程已经整理上传完成,朋侪们如果须要可以自行免费领取【包管100%免费】

 这些资料,对于【软件测试】的朋侪来说应该是最全面最完备的备战堆栈,这个堆栈也陪伴上万个测试工程师们走过最困难的旅程,渴望也能资助到你!
  1. 软件测试技术交流群社:786229024(里面还有工作内推机会,毕竟我们是关系社会。)
复制代码
软件测试口试文档

我们学习一定是为了找到高薪的工作,下面这些口试题是来自阿里、腾讯、字节等一线互联网大厂最新的口试资料,而且有字节大佬给出了权势巨子的解答,刷完这一套口试资料信赖各人都能找到满足的工作。

口试文档获取方式:




免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表