最近开发 api 平台时,遇到这样一个奇葩问题,在 django 的 view 视图里调用 requests 库发送 post 请求时,runserver 后第一次调用该视图都可以成功,第二次调用服务器会直接停止运行,如果去掉 requests 就没问题!难道视图函数里不能调用 requests 库么,这样的话还怎么做平台。。。这个问题困惑几天了,有大神解答么
有报错吗?贴代码或者报错看看,是不是你用错了。这个说看不出来。
等我到公司了我贴出来哈
这么奇怪,
我以前这么用过,没有问题啊。
加点 log 一步一步排查吧
我就是这么简单的一个调用,在视图里先调用接口请求,再返回,第一次没问题,第二次刷新页面服务就停止了
我这边是在 views 中调用其他 py 文件中的 request 发送请求,没问题。
你们看下我的后台,第一次刷新页面请求时,后台打印出了接口请求信息,第二次刷新页面时服务就自动停止了,Process finished with exit code -1!
你可以考虑这种解决方案,把 requests 封装一下,在 view 里调用你封装的 requests 的文件,把 url ,请求方法,post 的 data 当作参数传过去即可。
看到你说要做平台,那更加要把一些通用的工具封装一下,不然 view 里面代码会很乱的。
requests 封装了也不行。感觉只要调用 requests 库就会有这个问题,但是 get 请求可以,只有 post 会出问题!!请问这个什么解决方案么
刚才有论坛热心的同学针对我的问题在自己环境搭建了下,也是遇到和我一样的问题,第一次可以,第二次就挂掉了,这算是 django 的本身问题么。。。。。
开了 debug? 看截图里的请求是 GET 方法啊, 感觉 url 路由也有变化 web/index?
import requests
import time
from urllib.parse import unquote
def index(request):
data = {'service': 'create_activate_member', 'version': '1.0', 'request_time': int(time.time()), 'partner_id': '200029043446',
'_input_charset': 'UTF-8', 'sign_type': 'RSA', 'sign_version': '1.0', 'encrypt_version': '1.0',
'identity_id': '0401113818', 'identity_type': 'UID', 'client_ip': '1.1.1.1'}
print(unquote(requests.post('https://gate.pay.sina.com.cn/mgs/gateway.do', data={'data':data}).text))
return HttpResponse('index')
控制台的显示:
{"response_time":"20171227144005","_input_charset":"UTF-8","sign_version":"1.0","response_code":"ILLEGAL_ARGUMENT","response_message":"_input_charset不能为空"}
[27/Dec/2017 14:40:05] "GET /ep/index HTTP/1.1" 200 5
{"response_time":"20171227144010","_input_charset":"UTF-8","sign_version":"1.0","response_code":"ILLEGAL_ARGUMENT","response_message":"_input_charset不能为空"}
我尝试了一下,并没有什么错误。
所以你的 get_request_msg(),这个函数有问题??
不过我也尝试了手动触发一个异常,最多是报一个 500 的错误,django 不会退出啊。
还是看看是不是环境或者其它问题吧
多谢,找到问题了,加签加密我是用 jpype 调用 jar 包,第二次时 jpype 挂掉了,直接导致 django 挂掉