前端页面报错:
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)
复制代码 已可正常修改无报错:
末了: 下方这份完备的软件测试视频学习教程已经整理上传完成,朋侪们如果须要可以自行免费领取【包管100%免费】
这些资料,对于【软件测试】的朋侪来说应该是最全面最完备的备战堆栈,这个堆栈也陪伴上万个测试工程师们走过最困难的旅程,渴望也能资助到你!- 软件测试技术交流群社:786229024(里面还有工作内推机会,毕竟我们是关系社会。)
复制代码 软件测试口试文档
我们学习一定是为了找到高薪的工作,下面这些口试题是来自阿里、腾讯、字节等一线互联网大厂最新的口试资料,而且有字节大佬给出了权势巨子的解答,刷完这一套口试资料信赖各人都能找到满足的工作。
口试文档获取方式:
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金 |