curl -X POST -H "Content-Type: application/json; charset=utf-8" \
-H "X-LC-Id: ifxzjtbjg44urg5tcw8tybfeqwjsgaagweg50ysw8g3f8pl8" \
-H "X-LC-Key: 3kdyj14c1tki90ycfedr3b5gnx3mv36ucl7he9jqdlkxivrk" \
-H "X-LC-Prod: 0" \
-d '{"mobilePhoneNumber":"我的手机号"}' \
https://leancloud.cn/1.1/functions/smscode3
{"code": 141, "error": "Cloud Code script had an error."}%

本地localhost:3001测试函数成功发送验证码,函数内容仅仅是设置了header 然后post到requestSmsCode

没人么,另外换了云引擎调用
result = cloudfunc.run('smscode', params=a)
返回LeanCloudError: [404] cloud func named 'smscode' not found.
请问是有什么没写么

请问你将代码(包含 smscode 这个函数)部署到了云引擎上么?

暂时没有 在本地测试 只要换另外一个函数就可以..我试着交换了两个函数名 smscode这个函数就返回404

@engine.define 请问cloud.py中的函数只要加这个装饰器吗。。为什么我好像只能找到一个函数 我几乎复制粘帖过去的 换个名字 然后cloudfunc.run 就说not found

cloudfunc.run 会通过网络请求调用线上的云函数,如果你没有将代码部署到服务器,就会出现 not found 的错误

我用postman测localhost 只要修改本地代码就可以 只有一个函数能正确返回 别的都notfound 不知道哪里有问题

如果是在本地测试的话,如果你的函数中用到了 cloudfunc.run, 还是会去调用服务器上的函数,不知道你是否是这个情况。

avoscloud deploy 还要运行一下 avoscloud publish

已经这么做 还是不行。。返回404 真是奇怪

我用你帖子中提供的 CURL 命令请求:

curl -X POST -H "Content-Type: application/json; charset=utf-8" \
-H "X-LC-Id: ifxzjtbjg44urg5tcw8tybfeqwjsgaagweg50ysw8g3f8pl8" \
-H "X-LC-Key: 3kdyj14c1tki90ycfedr3b5gnx3mv36ucl7he9jqdlkxivrk" \ -H "X-LC-Prod: 0" \
-d '{"mobilePhoneNumber":"我的手机号"}' \
https://leancloud.cn/1.1/functions/smscode

结果是

{"code": 141, "error": "Cloud Code script had an error."}

然后我看到你的应用有出现一个 cannot make memory view because object does not have the buffer interface 的错误,应该是这个错误导致请求失败,建议先检查一下这个错误(在 LeanCloud 的网页控制台上可以看到详细的错误堆栈)。

至于你提到的 404 我没有遇到。

我找到问题了。。

headers = {
            "X-LC-Id":"ifxzjtbjg44urg5tcw8tybfeqwjsgaagweg50ysw8g3f8pl8",
            "X-LC-Key":"3kdyj14c1tki90ycfedr3b5gnx3mv36ucl7he9jqdlkxivrk",
            "Content-Type":"application/json"
 }
data = {"mobilePhoneNumber": mobilePhoneNumber}
res = requests.post('https://api.leancloud.cn/1.1/requestSmsCode',data=JsonResponse(data),headers=headers)
print res.content

问题出在requests.post('https://api.leancloud.cn/1.1/requestSmsCode',data=JsonResponse(data),headers=headers) 返回cannot make memory view because object does not have the buffer interface 可是找了很久没找到解决办法。不知能否有帮助,另外在单文件下测试完全没问题 localhost:3001测试也没问题

我换成urllib2去访问 只要加了headers就返回HTTP Error 400: Bad Request
完全不知道该怎么办。。

requests.post 的时候,data 应该是个字符串,这里代码用了 django.http.JsonResponse,所以出异常了。另外看你的代码,异常被捕获然后 return 出去了,这样 LeanEngine 会尝试用 json.dumps 这个异常对象,导致出了另外一个异常,而原始异常的调用栈被掩盖了。这里异常应该直接抛出去。

不好意思回复很晚 同样的代码直接在单文件测试下可以,最后我选择把这个放在flask里部署,不用云函数,代码执行成功,而且直接用data=data 貌似也是一样的问题。