我已经在几个问题中读到了这个主题,但我还没有找到解决方案。所以,我问了几乎相同的问题,就像许多人以前做过的那样:
我在App Runner服务器上部署了一个Django应用,在EC2示例上部署了一个后端进程(也是Python)。
我需要能够在这两个服务器之间传递值,所以当用户与django应用交互时,它会调用EC2后端,处理信息并返回输出。
目前,我正在尝试这样做:
在我的Django应用程序中,我有这样的代码。点击按钮时,它会执行ecconsult()
:
from django.shortcuts import render, HttpResponse
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
import json
import requests
def home(request):
return render(request, 'index.html')
def ecconsult(request):
data_to_send = "communication test"
response = requests.post('http://specific_host:specific_port/api/procesar', json=data_to_send)
if response.status_code == 200:
jsondatabe = response.text
response_data = {'jsondatabe': jsondatabe}
else:
print('Error al procesar la call del backend')
return render(request, 'index.html', response_data)
字符串
在我的EC2后端服务器上,我收到的数据如下:
from flask import Flask, request, jsonify
from flask_cors import CORS
app = Flask(__name__)
CORS(app, resources={r"/api/*": {"origins": "Django_app_domain"}})
@app.route('/')
def hello():
print("accesing from outside")
return 'Hello backend!'
@app.route('/api/procesar', methods=['POST'])
def procesar_datos():
data = request.get_json()
print(data)
response = "connection successful"
print("Returning data to webapp")
return response
if __name__ == '__main__':
app.run(host='0.0.0.0', port=specific_port)
型
如果我在localhost中运行Django应用程序,它会完美地与EC2服务器进行通信,但是当我将其部署在App Runner服务器上时,它会给我一个:
Failed to load resource: the server responded with a status of 500 (Internal Server Error)
型
有人有什么建议吗?如果我在App Runner上部署django应用程序,没有“request”库也能完美工作,但有了它会出现前面的错误(不应该是安装了这个库,但我也不排除任何可能性)。
我还尝试了flask_cors,以防止CORS关闭试图访问外部未知源的错误。
1条答案
按热度按时间whlutmcx1#
结果是日志进程给了我这个:
字符串
在localhost中,我使用的是与最新Python兼容的最新urllib 3,但由于App Runner的依赖性,我不得不将其更改为1.25.4版本。
谢谢你的建议!