实例解释遇到前端报错时如何排查问题
创作时间:
作者:
@小白创作中心
实例解释遇到前端报错时如何排查问题
引用
CSDN
1.
https://blog.csdn.net/2201_76100073/article/details/138250326
前端页面报错:
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()
else:
return NbResponse(code=500,msg=form_obj.errors.get_json_data())
分析:因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)
已可正常修改无报错:
总结:
这是一篇关于前端开发中遇到500错误时如何排查问题的技术文章。文章通过一个具体的案例,详细描述了排查过程和解决方案,涉及Django框架中PUT请求的处理、中间件的使用等技术细节。文章结构清晰,从问题现象到具体代码实现,再到最终的解决方案,具有较强的实用性和参考价值。
热门推荐
成都益新社区:如何让厨余垃圾分类成为居民生活新风尚?
如何统计系统的代码量,查看代码的文件大小、代码行数及者其他度量指标?
深海生物的生存策略,科学家如何进行研究?
基于Arduino的LCD显示实验教程
洗衣机洗完衣服出现臭味的解决方法(如何有效去除洗衣机内的异味)
长期出现这些症状,你可能是神经衰弱!持续3个月以上,去就医!
基于YOLOv5与DeepSORT的驾驶员分心行为与疲劳预警系统研究
和解赔偿款怎么收不会有问题的钱
清代十大书法家作品欣赏,各有千秋
计算机硬件与软件:相互依存的两大核心
电子科技大学王牌专业怎么样?国内首个,影响力不一般!
热带气旋:发展和结构
领取结婚证后,多久能在国家政务平台查到电子版本?
高钾血症健康指导
NEJM最新研究:40岁前戒烟可降低95%死亡风险,10年以上戒烟效果惊人
鼠和牛6合是什么意思?生肖关系影响解析
如何迁移微信聊天记录到另一个手机?万事先备份,没备份教你4招
交通事故中尸体处理流程如何
超算行业动态:重大应用需求彰显超算中心价值点,产业发展前景广阔
拳击学习完全指南:从入门到实战的全方位技巧分享
一战巴尔干战场,历史的交汇与冲突
清末民初全才艺术家陆恢的书画成就及收藏价值
涵盖8种车型!火车上这些地方都能充电
孜孜以求,逐梦万米蓝天:记大飞机自主工程总设计师张彦仲
投资安徽丨皖江崛起汽车城
明朝锦衣卫:权力的利刃与历史的阴影
李玫瑾:3岁立恩,6岁立威,12岁立价值,父母一定要及时把控
石墨电极所属的行业是什么?这个行业的发展趋势如何?
婚姻登记机关强化档案管理,确保历史资料完整性和准确性
新手档案员入门指南:从文件收集到档案入库的全流程操作