实例解释遇到前端报错时如何排查问题

前端页面报错:

 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)

 已可正常修改无报错:

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

文档获取方式:

加入我的软件测试交流群:632880530免费获取~(同行大佬一起学术交流,每晚都有大佬直播分享技术知识点)

这份文档,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

以上均可以分享,只需要你搜索vx公众号:程序员雨果,即可免费领取

相关推荐

  1. 频繁的FullGC问题如何解决?

    2023-12-15 18:12:02       9 阅读
  2. vscode中开发goalng,debug遇到的tools问题

    2023-12-15 18:12:02       23 阅读
  3. 问题心得

    2023-12-15 18:12:02       8 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-15 18:12:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-15 18:12:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-15 18:12:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-15 18:12:02       20 阅读

热门阅读

  1. PHP的延迟静态绑定

    2023-12-15 18:12:02       43 阅读
  2. git 常用的使用方法

    2023-12-15 18:12:02       40 阅读
  3. shell初识

    2023-12-15 18:12:02       31 阅读
  4. Redis的过期策略有哪些?

    2023-12-15 18:12:02       36 阅读
  5. linux查看防火墙状态及开启关闭命令

    2023-12-15 18:12:02       38 阅读
  6. 服务器迁移到另一台服务器需要注意哪些?

    2023-12-15 18:12:02       37 阅读
  7. Web Day2

    Web Day2

    2023-12-15 18:12:02      33 阅读
  8. Harmony OS基本介绍

    2023-12-15 18:12:02       31 阅读
  9. facebook的营销方式

    2023-12-15 18:12:02       36 阅读
  10. Python实现自动登录Facebook机器人

    2023-12-15 18:12:02       30 阅读
  11. torch.nn.NLLLOSS vs torch.nn.CrossEntropyLoss

    2023-12-15 18:12:02       43 阅读