Django发送POST请求调用审计日志创建接口返回400错误如何解决
问题原因
你调用requests.post方法时将参数放在了params字段中,params是用来传递URL查询参数的,从你的错误日志也能看到所有参数都拼接在了请求URL后面:/audit_logs/create/?username=abcpadmin&action_type=Export&action=Export&ip_address=127.0.0.1。而audit_logs/create/接口是从POST请求体中读取参数,所以服务端识别不到你提交的字段,才会返回必填项缺失的400错误。
修复方案
把请求代码中的params参数替换为json或data即可,具体根据接口接收的参数格式选择:
audit_url="http://127.0.0.1:8000/audit_logs/create/" audit_parms={ "username":username, "action_type":action_type, "action":action, "ip_address":ip_address } # 接口接收JSON格式参数(大部分前后端分离场景用这个) audit_obj=requests.post(audit_url, headers=headers, json=audit_parms) # 如果接口接收表单格式参数,就用下面的写法 # audit_obj=requests.post(audit_url, headers=headers, data=audit_parms)
额外优化建议
- 当前审计日志请求和PDF导出是串行执行的,如果审计接口响应慢会拖慢PDF下载速度,可考虑将审计日志写入逻辑改为异步任务处理,不阻塞主请求
- 代码中使用了过多全局变量存储查询条件,多用户并发请求时会出现数据串扰的问题,建议将fromDate、toDate这类参数改为从当前请求对象中读取,不要用全局变量存储
内容的提问来源于stack exchange,提问作者Shweta Shinde
相关产品推荐
相关产品推荐

