user_image
By  LeechenLove200207    On   2020年7月10日 10:58

我遇到的问题,解决了蛮久的,分享一下,看看对大家有没有帮助 1.503错误,看看自己本地是不是设置了代理,把代理关闭即可 2.我也遇到了500错误 (1)我换成了用requests库请求,代码如下: --->handler.py import requests def report_data(): """ 收集硬件信息,然后发送到服务器。 :return: """ # 收集信息 info = info_collection.InfoCollection() asset_data = info.collect() # 将数据打包到一个字典内,并转换为json格式 data = json.dumps({"asset_data": asset_data}) # 根据settings中的配置,构造url url = "http://%s:%s%s" % (settings.Params['server'], settings.Params['port'], settings.Params['url']) print('正在将数据发送至: [%s] ......' % url) try: headers = {'content-type': 'application/json'} response = requests.post(url=url, data=data, headers=headers) message = response.text except Exception as e: message = "发送失败" + f" 错误原因:{e}" print(f"发送失败,错误原因:{e}") # 记录发送日志 with open(settings.PATH, 'ab') as f: log = f"发送时间:{time.strftime('%Y-%m-%d %H:%M:%S')} \t 服务器地址:{url} \t 返回结果:{message} \n" f.write(log.encode()) print("日志记录成功!") (2)views.py的代码也修改一下 @csrf_exempt def report(request): """ 通过csrf_exempt装饰器,跳过Django的csrf安全机制,让post的数据能被接收,但这又会带来新的安全问题。 可以在客户端,使用自定义的认证token,进行身份验证。这部分工作,请根据实际情况,自己进行。 :param request: :return: """ if request.method == "POST": request_body = json.loads(request.body.decode()) asset_data = request_body['asset_data'] if not asset_data: return HttpResponse("没有数据!") if not issubclass(dict, type(asset_data)): return HttpResponse("数据必须为字典格式!") # 是否携带了关键的sn号 sn = asset_data.get('sn', None) if sn: # 进入审批流程 # 首先判断是否在上线资产中存在该sn asset_obj = models.Asset.objects.filter(sn=sn) if asset_obj: # 进入已上线资产的数据更新流程 pass return HttpResponse("资产数据已经更新!") else: # 如果已上线资产中没有,那么说明是未批准资产,进入新资产待审批区,更新或者创建资产。 obj = asset_handler.NewAsset(request, asset_data) response = obj.add_to_new_assets_zone() return HttpResponse(response) else: return HttpResponse("没有资产sn序列号,请检查数据!") return HttpResponse('200 ok')